为文字字符,特殊字符和" +"创建模式。

时间:2017-05-29 11:17:49

标签: java regex

我尝试为文字字符,一对特殊字符和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字符串+不匹配:

+

我错过了什么?

3 个答案:

答案 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));
    }
}
相关问题