5

我需要一个正则表达式来匹配除 Q 之外的任何字符或单词。

我尝试使用表达式

/\b((?!(Q)).+?)\b/ 

但它不工作!

4

2 回答 2

12

您是否要禁止使用“Q”一词或包含“Q”的词?


包含“Q”的禁止词

使用双重否定:“一个字符是(\w and not-Q)”是“一个字符不是(not-\w or Q)”([^\WQ])。

/\b([^\WQ]+)\b/

您可以使用环视(例如)执行基本的集合算术\w(?<!Q)

/b((?:\w(?<!Q))+)\b/

有一个实验功能可以使用字符类执行集合算术。

# Use at your own risk.
use experimental qw( regex_sets );

/\b(?[ \w - [Q] ])+)\b/

禁止“Q”字

/\b(Q\w+|[^\WQ]\w*)\b/

或者

/\b(?!Q\b)(\w+)\b/

或者

# Use at your own risk.
use experimental qw( regex_sets );

/\b(Q\w+|(?[ \w - [Q] ])+)\w*)\b/
于 2013-05-15T04:24:20.963 回答
1

你可以使用这个正则表达式

\b(?!\w*Q)(\w+)\b

正则表达式的问题:

1] (?!Q)将检查Q当前位置之后是否有..因此,\b(?!Q)您正在检查特定单词是否以.开头Q

您可以使用\b(?!\w*Q)which 来检查单词的Q 任何地方

2] .+?\b 多余的,因为.也会匹配space.

因此,如果您的输入Hello World使用\b.+?\b正则表达式,它将匹配Hello, space, World。您应该使用\b\w+\b

于 2013-05-15T04:30:59.713 回答