问题描述
|
冰岛:国家\\ n欧洲:::大陆\\ n雷克雅未克:城市
使用上面的字符串,我想匹配出现在单个冒号之前的单词,而不匹配出现在双冒号之前的单词。另外,如果在单个冒号之前有空白,我希望将其忽略并匹配空白前的单词。
因此,从上面的字符串中,我想匹配\“ Iceland \”(没有尾随空格)和\“ Reykjavik \”。
我以为创建捕获组会起作用,但是不行:
/(\\w+(?=:))(?!=::)/gm
我不知道如何在单个冒号之前忽略空格。
解决方法
我认为您对于否定的前瞻断言只是语法有误...它是(?!pattern),而不是(?!= pattern)。
因此,请尝试:
/(\\w+(?=:))(?!::)/gm
[编辑-错过了问题的另一部分]
要忽略空格,只需将其匹配但不要捕获它。
perl -nle \'print $1 if /(\\w+)\\s*(?=:)(?!::)/gm\'
hello ::there :dude
...打印“有”。
,(\\w+)\\s*:(?!:)
看起来对您来说可能是一场胜利