2014-10-04 63 views
1

([^\W\dA-Z && (I|X|L|V|\.)])\1{2}作品http://regex101.com/r/xB5sT0/1查找信三胞胎除了列出的单词

如何使除\b(Fuss|Mass|Bloss|Gross)案件工作?

所有列出的德语单词可以在单词中间为好,或以小写字母(fuss|mass|bloss|gross)开始

我不想匹配composita的话就像Fusssoldat,因为我知道一切都确定与他们,因为fuss + soldat是有道理的。

+0

请[此](http://regex101.com/r/bD3gO9/2)做你想做的事吗? – 2014-10-04 17:49:18

+0

事实上,它可以在网络上运行,但是由于Perl序列不能用于Notepad ++或EmEditor。我想这样EditPlus。这些是我的主要3位编辑,不想添加第4位。 – gasyoun 2014-10-04 20:49:33

回答

0
([^\W\dA-Z && (I|X|L|V|\.)])\1(?<!(?i)fuss|mass|bloss|gross)\1 

Regular expression visualization

Debuggex Demo

我以这种方式找到了解决方案:

  1. 你的主要模式([^\W\dA-Z && (I|X|L|V|\.)])
  2. 重复一次(像以前不是两次)\1
  3. 向后看,如果当前的匹配是不是下列之一(!):(?<!(?i)fuss|mass|bloss|gross)
  4. 重复的主再次进行模式匹配以确保三次发生
+0

哇,它不仅有效,而且可视化。这是一件很棒的事情,从未见过。我向你致谢。 – gasyoun 2014-10-04 18:37:48

+0

我只想知道为什么https://www.debuggex。com/r/CUCZMUDvnxPEzyKK/1表示“结果:不匹配从黑色三角滑块开始”,因为1)它完成作业2)它完美http://regex101.com/r/xB5sT0/3 – gasyoun 2014-10-04 18:45:48

+0

模式是不应该匹配'Schlussscene'中的'sss'? – 2014-10-04 18:54:21

0

您可以使用丢弃技术,该技术包括将丢弃模式放在由管道分割的正则表达式的开头(正则表达式OR),并在末尾使用捕获组。像下面这样:

discard patt 1 | discard this too | another discard pattern | (keep this) 

所以,你如果你可以做这样的事情:

\b(?:Fuss|Mass|Bloss|Gross)|([^\W\dA-Z && (I|X|L|V|\.)])\1{2} 

然后访问捕获组抓住你的内容。

如果您使用PCRE(Perl兼容正则表达式)正则表达式,您可以使用(*SKIP)(*FAIL)标志放弃匹配的模式。像:

\b(?:Fuss|Mass|Bloss|Gross)(*SKIP)(*FAIL)|([^\W\dA-Z && (I|X|L|V|\.)])\1{2} 

如果您想了解更多关于这招,你可以看看这个优秀的线程:

Regex Pattern to Match, Excluding when.../Except between

+0

当然,我可以使用'|',但唯一的问题是分组。我不使用'PCRE'。已测试'\ b(?:Fuss | Mass | Bloss | Gross)|([^ \ W \ dA-Z &&(I | X | L | V | \。)])\ 1 {2}'on http:/ /regex101.com/r/xB5sT0/1 - 没有工作,它应该忽略了Fusssoldat,只发现了Dusssoldat,但失败了。感谢您的详细解答。 – gasyoun 2014-10-04 18:14:21