我尝试为文字字符,几个特殊字符和+
创建图案,但没有成功。为文字字符,特殊字符和“+”创建图案
我用这个作为例子Regex pattern including all special characters 这是我的正则表达式,但根据http://www.regexplanet.com/advanced/java/index.html字符串+
不匹配:
[a-zA-Z\x43-_#@.:;/\\=!^() ]+
我错过了什么?
我尝试为文字字符,几个特殊字符和+
创建图案,但没有成功。为文字字符,特殊字符和“+”创建图案
我用这个作为例子Regex pattern including all special characters 这是我的正则表达式,但根据http://www.regexplanet.com/advanced/java/index.html字符串+
不匹配:
[a-zA-Z\x43-_#@.:;/\\=!^() ]+
我错过了什么?
你必须把-
末,否则\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码,只是将其删除并使用+
作为文字。
43是十进制 ASCII码为+
。
但是你写\x43-_
这意味着: C
(十六进制 43)和_
之间字符的范围。
我想,你在这里想没有任何的范围,但仅3字面值:
_
)。如果是这样的情况下,该片段变成+\-_
(加可以作为给定, [
和]
之间的“字面”减去需要引用与\
, 和undescore可以保留为是)。
使用这个表达式它应该工作:
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));
}
}
为什么你'\ x43'? Ans' +'甚至不是你的字符类的一部分 – anubhava
'+'的ASCII值是0x2B或者十进制43.为什么不只是使用'\ +'? –
'[a-zA-Z \ x43 -_#@。:;/\\ =!^()+] +'? –