如何编写正则表达式来捕获字符串中没有 US 作为前两个字符的字符串?例如CA some text
。此字符串应与正则表达式匹配,因为它没有 US 作为前两个字符。但US some text
不应该匹配正则表达式。
^(\w{2})(.*?)$
是我开始的......但我想将美国排除在前 2 个字符中。
这是一种写法:
^([^U]|U[^S]).*$
这意味着第一个字符不是'U'
,或者当第一个字符是时'U'
,第二个字符一定不是'S'
。
只需添加一个负前瞻:
^(?!US\b)(\w{2})(.*)$
(问号在这里没有用,因为后面有模式的结尾)
如果您只想捕获所有文本而不是特定组中的国家/地区:
^(?!US\b).*$
(不要忘记双反斜杠)
人们经常想匹配一个否定的。而是测试肯定匹配,然后您的 if 分支是失败分支。例如。
if(str.matches('^US.*$')){
// fail
// or
// str.substring(2)
} else {
//pass
}
编写和维护要容易得多