关于正则表达式:编写Java正则表达式

Write a Java regular expression

我有一个问题要编写Java正则表达式,下面是匹配字符串的要求:

  • ' or abc:匹配
  • X' or abc匹配
  • Good X' or abc匹配
  • Good 'X' or abc不匹配

我使用的是java.util.regex.pattern和java.util.regex.matcher。匹配意味着Java.UTI.ReXE.MatHeC.MatChess()返回true。

这是我写的正则表达式:".*((((?。但它不起作用。

对于我的应用程序中的一些需求,我必须在正则表达式的开头和结尾使用".*"。

我刚接触雷杰克斯,有人能帮我吗?

谢谢。


从您的示例中,我猜您正在尝试检查字符串中是否只有一个'

regex可以是^[^']*'[^']*$,使用matches方法可以简化为[^']*'[^']*

  • [^']*不是'的一切
  • ':一个'
  • [^']*不是'的一切
1
2
3
4
5
6
7
8
9
10
11
12
String[] a = {
   "' or abc",
   "X' or abc",
   "Good X' or abc",
   "Good 'X' or abc"
};

for (int i = 0; i < a.length; i++) {
    Pattern p = Pattern.compile("[^']*'[^']*");
    Matcher m = p.matcher(a[i]);
    System.out.println(m.matches());
}

输出:

1
2
3
4
true
true
true
false

但是,你不需要一个Pattern和一个Matcher,只需要使用

1
yourString.matches("[^']*'[^']*");


如果必须使用.*在表达式的开头,则此表达式有效:

1
".*(?=(?<!Good 'X)' or abc$).*"

诀窍是它用"(?"展望未来。="以"'或abc"结尾但前面没有"good"x"的表达式-使用反向查找"(?<!.


此regex采用了负向前看的方式,通过了您的测试:

1
if (str.matches("^(?!(.*?'){2}).*"))

观看现场演示。