编写Java正则表达式时遇到问题,以下是匹配字符串的要求:
' or abc
:匹配X' or abc
:匹配Good X' or abc
:匹配Good 'X' or abc
:不匹配我正在使用java.util.regex.Pattern和java.util.regex.Matcher。 match意味着java.util.regex.Matcher.matches()返回true。
这是我写的正则表达式:".*((((?<!\\')[^\\s\\']+))[\\'\\s]+(or|and)).*"
。但它不起作用。
对于我的应用程序中的某些要求,我必须在正则表达式的开头和结尾使用“。*”。
我是regex的新手,有人可以帮助我吗?
感谢。
答案 0 :(得分:2)
从您的示例中,我猜您正在尝试检查字符串中是否只有一个'
。
正则表达式可以是^[^']*'[^']*$
,使用matches
方法可以缩减为[^']*'[^']*
:
[^']*
:所有不是'
'
:'
[^']*
:所有不是'
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());
}
输出:
true
true
true
false
但是,为此目的,您不需要Pattern
和Matcher
,只需使用
yourString.matches("[^']*'[^']*");
答案 1 :(得分:1)
答案 2 :(得分:1)
如果你必须在表达式的开头使用。*,那么这个有效:
".*(?=(?<!Good 'X)' or abc$).*"
诀窍在于它使用“(?=”以“'或abc”结尾的表达式向前看,但前面没有“Good'X” - 使用负面的lookbehind“(?&lt;!”。< / p>