我尝试为文字字符,一对特殊字符和URL url = new URL("http://103.75.33.98/BPService/GetAllBPService.svc/GetSalesPersonNo/"+cbs+"/"+city+"/"+saleP);
创建模式但没有成功。
我以此为例Regex pattern including all special characters
这是我的正则表达式,但根据http://www.regexplanet.com/advanced/java/index.html字符串+
不匹配:
+
我错过了什么?
答案 0 :(得分: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代码,只需删除它并使用+
作为文字。
答案 1 :(得分:2)
43是+
的十进制 ASCII代码。
但你写了\x43-_
,这意味着:一个范围之间的字符
C
(十六进制 43)和_
。
我想,你想要的不是任何范围,只有3个字面字符:
_
)。如果是这种情况,请将此片段更改为+\-_
(可以按原样给出,
“{1}}和[
之间的”字面值“减去需要使用]
引用,
和非核心可以保持原样。)
答案 2 :(得分: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));
}
}