RegEx - 在单个字符之前匹配单词,但不是双字符?

时间:2011-05-24 21:39:23

标签: regex pattern-matching

  

冰岛:Country \ nEurope :: Continent \ nReykjavik:City

使用上面的字符串,我想匹配单个冒号之前出现的单词,但不匹配双冒号之前的单词。另外,如果在单个冒号之前有空格,我希望它被忽略并匹配空格之前的单词。

所以从上面的字符串我想匹配“冰岛”(没有尾随空格)和“雷克雅未克”。

我认为创建捕获组会起作用,但事实并非如此:

/(\w+(?=:))(?!=::)/gm

我不知道在单个冒号之前如何忽略空格。

2 个答案:

答案 0 :(得分:4)

我认为你的负面前瞻断言的语法错误......它是(?!pattern),而不是(?!= pattern)。

所以试试:

/(\w+(?=:))(?!::)/gm

[编辑 - 错过了问题的其他部分]

要忽略空格,只需匹配它,但不要捕获它。

perl -nle 'print $1 if /(\w+)\s*(?=:)(?!::)/gm'
hello  ::there   :dude

...打印“那里”。

答案 1 :(得分:1)

(\w+)\s*:(?!:)

看起来它可能是你的胜利