0

什么正则表达式会检查一行中没有(字符的单词?我试过(\w+)(\?!\()但它不起作用,并且(\w+)[^\(]通过将最后一个字母视为[^\(]部分来匹配任何内容。我正在使用 D 编程语言。

应该匹配的例子:

它应该与asdf以下内容匹配:

asdf blah 
asdf.beef
(asdf)

但不在这些:

asdf(blah)

但是,在 中asdf(blah)blah将匹配。同样在asdf blahandasdf.beef中,blahandbeef也将被匹配。

4

3 回答 3

4

我对D的能力一无所知。如果它支持 perl 正则表达式语言,你可以这样做:

 \w+\b(?!\()

(?!xxx) 构造用于零宽度负前瞻。您需要 \b 单词边界,以防止它匹配除了后面跟括号的单词的最后一个字母之外的所有字母。

编辑:我在下面调整了 M42 的好主意,以便它在 D 中工作。试试这个

 (\w+)\b([^\(]|$)

第一个捕获组应包含您感兴趣的单词。

于 2010-12-17T04:17:36.673 回答
1

这个怎么样:

/^\(?(\w+)\b(?:[^\(]|$)/

使用 D 编译器进行测试,但可以在 Perl 中使用。

根据 russ 评论,该(?:)构造在 D 中是未知的:

/^\(?(\w+)\b([^\(]|$)/
于 2010-12-17T09:23:43.490 回答
-1
(\w+)[^\(\w]

所以你否定 ( 和 \w?

于 2010-12-17T03:37:18.610 回答