正则表达式 - 除给定单词外的所有有效标识符?

时间:2015-02-17 10:46:58

标签: java regex scala

我想要一个接受除给定单词之外的所有有效标识符(例如[a-zA-Z][a-zA-Z0-9]*)的正则表达式(例如" foo")。单词" foo"作为单词的一部分,例如" foobar",很好。我尝试使用负面预测和后视,但我正在努力,因为我想允许像" foobar"否定的前瞻性将被禁止。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

您可以尝试下面的内容。

^(?!foo$)[a-zA-Z][a-zA-Z0-9]*$
开头的

(?!foo$)否定前瞻断言该行不会包含确切的字符串foo

DEMO

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]*$

参见演示。

https://regex101.com/r/zB3hI5/2

答案 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|$))

Demo

它将检查句子中的所有单词。