我想要一个接受除给定单词之外的所有有效标识符(例如[a-zA-Z][a-zA-Z0-9]*
)的正则表达式(例如" foo")。单词" foo"作为单词的一部分,例如" foobar",很好。我尝试使用负面预测和后视,但我正在努力,因为我想允许像" foobar"否定的前瞻性将被禁止。我怎么能这样做?
答案 0 :(得分:2)
您可以尝试下面的内容。
^(?!foo$)[a-zA-Z][a-zA-Z0-9]*$
开头的 (?!foo$)
否定前瞻断言该行不会包含确切的字符串foo
。
String s[] = {"foobar", "foo", "bar", "foom", "mfoo"};
for(String i: s)
{
System.out.println(i.matches("(?!foo$)[a-zA-Z][a-zA-Z0-9]*"));
}
<强>输出:强>
true
false
true
true
true
答案 1 :(得分:1)
^(?!foo$)[a-zA-Z][a-zA-Z0-9]*$
只需添加一个前瞻。预测会检查单词是否不是foo
。
或
^(?!foo\\b)[a-zA-Z][a-zA-Z0-9]*$
参见演示。
答案 2 :(得分:1)
虽然其他答案都是正确的,但看起来你需要的只是这个条件:
input != "foo"
如果确实如此,为什么不保持简单并使用这个条件:
( !input.equals("foo") && input.matches( "[a-zA-Z][a-zA-Z0-9]*" ) )
答案 3 :(得分:0)
我不知道我是否复杂,但如果你想逐字逐句,那么正则表达式将如下所示:
((?!(?:\s|^)foo\s)(?:\s|^)[a-zA-Z][a-zA-Z0-9]*(?=\s|$))
它将检查句子中的所有单词。