【发布时间】:2017-03-01 17:46:05
【问题描述】:
在正则表达式中,执行多个单词的否定以及构成这些单词的字符排列的最佳方法是什么?
例如:我不想
"zero dollar"
"roze dollar"
"eroz dollar"
"one dollar"
"noe dollar"
"oen dollar"
但我确实想要
"thousand dollar"
"million dollar"
"trillion dollar"
如果我写
not m/ [one | zero] \s dollar /
它不会匹配字符的排列,并且外部的“not”函数将使正则表达式匹配其他所有内容,例如“big bang”,而正则表达式中没有“dollar”。
m/ <- [one] | [zero] > \s dollar/ # this is syntax error.
非常感谢!
lisprog
【问题讨论】:
-
FWIW,避免语法错误的方法是将其写为
/ <!after one | zero> \s dollar/ -
应该有一个新的tag类别
perl6 regexen,这样人们就可以区分PCRE 5种类型了。 -
@sln
regex标签的描述说“所有带有这个标签的问题还应该包括一个指定适用的编程语言或工具的标签。” Aiui 这解决了您提出的问题(不仅针对 PCRE 正则表达式与非 PCRE 正则表达式,而且还针对一种 PCRE 风味与另一种),前提是提问者遵循警告添加语言/工具标签(或编辑为他们做)。我相信所有 Perl 6 正则表达式问题都是如此。也许tag intersection searching 需要改进? -
@raiph - 我认为 Perl6 正则表达式有一些兼容模式可以启用 Perl5。但是,Perl5 风格的正则表达式结构渗透到其他引擎的 %90 语法中。这就是为什么 regex 标记主要是 Perl5 样式的默认值。让正则表达式符合 perl6 的要求实在是太大了,因为它在正则表达式领域大多是独立的。
-
谢谢你的罪和raiph!我更喜欢 perl6 正则表达式。
标签: regex permutation raku negation