2017-05-29 60 views
2

我尝试为文字字符,几个特殊字符和+创建图案,但没有成功。为文字字符,特殊字符和“+”创建图案

我用这个作为例子Regex pattern including all special characters 这是我的正则表达式,但根据http://www.regexplanet.com/advanced/java/index.html字符串+不匹配:

[a-zA-Z\x43-_#@.:;/\\=!^() ]+ 

我错过了什么?

+2

为什么你'\ x43'? Ans' +'甚至不是你的字符类的一部分 – anubhava

+0

'+'的ASCII值是0x2B或者十进制43.为什么不只是使用'\ +'? –

+0

'[a-zA-Z \ x43 -_#@。:;/\\ =!^()+] +'? –

回答

2

你必须把-末,否则\x43-_意味着C ASCII和ACSII的_之间的任何东西:

[a-zA-Z\x43_#@.:;/\\=!^() +-]+ 

Regex101告诉我们,以前,-意味着:

\x43-_ a single character in the range between C (ASCII 67) and _ (ASCII 95) (case sensitive) 

如果您将其移动到最后:

=!^() +- matches a single character in the list =!^() +- (case sensitive) 

+可用作字符组内的文字。 \x43用于C,所以我认为你在这里混淆了ASCII码,只是将其删除并使用+作为文字。

2

43是十进制 ASCII码为+

但是你写\x43-_这意味着: C十六进制 43)和_之间字符的范围

我想,你在这里想没有任何的范围,但仅3字面值:

  • 加,
  • 减,
  • 下划线(_)。

如果是这样的情况下,该片段变成+\-_(加可以作为给定, []之间的“字面”减去需要引用与\, 和undescore可以保留为是)。

1

使用这个表达式它应该工作:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

final String regex = "[a-zA-Z_#@.:;\\/\\\\=!^() +-]+"; 
final String string = "+"; 

final Pattern pattern = Pattern.compile(regex); 
final Matcher matcher = pattern.matcher(string); 

while (matcher.find()) { 
    System.out.println("Full match: " + matcher.group(0)); 
    for (int i = 1; i <= matcher.groupCount(); i++) { 
     System.out.println("Group " + i + ": " + matcher.group(i)); 
    } 
}