冰岛:Country \ nEurope :: Continent \ nReykjavik:City
使用上面的字符串,我想匹配单个冒号之前出现的单词,但不匹配双冒号之前的单词。另外,如果在单个冒号之前有空格,我希望它被忽略并匹配空格之前的单词。
所以从上面的字符串我想匹配“冰岛”(没有尾随空格)和“雷克雅未克”。
我认为创建捕获组会起作用,但事实并非如此:
/(\w+(?=:))(?!=::)/gm
我不知道在单个冒号之前如何忽略空格。
答案 0 :(得分:4)
我认为你的负面前瞻断言的语法错误......它是(?!pattern),而不是(?!= pattern)。
所以试试:
/(\w+(?=:))(?!::)/gm
[编辑 - 错过了问题的其他部分]
要忽略空格,只需匹配它,但不要捕获它。
perl -nle 'print $1 if /(\w+)\s*(?=:)(?!::)/gm'
hello ::there :dude
...打印“那里”。
答案 1 :(得分:1)
(\w+)\s*:(?!:)
看起来它可能是你的胜利