从正则表达式匹配中捕获单词

时间:2016-02-07 01:10:46

标签: regex perl

我正在研究perl中的正则表达式,它标识了我想要它的内容:单词final g(但不是跟随'n')或k(但不跟随'r')在word-initial g之前(但不是l或r),单词初始k或单词初始c(但不是c,在i,e,y或h之前):

(((?<!n)g)|(?<!r)k)\s(g(?!l|r)|k|c(?!i|e|y|h));

但是,我想要它捕获在其末尾有g或k的单词,所以我尝试了这样的事情: (^|\s.*(((?<!n)g)|(?<!r)k))\s(g(?!l|r)|k|c(?!i|e|y|h));以便$1捕获行的开头或空格(表示单词的开头),直到g,k或c之前的下一个空格(单词的结尾) )。也许这是一个括号问题,但我不确定如何保持我的分组,同时还指定我想要$1捕获的位置。

1 个答案:

答案 0 :(得分:2)

/(\S*(((?<!n)g)|(?<!r)k))\s(g(?!l|r)|k|c(?!i|e|y|h))/怎么样?

编辑:看一下,它可以使用一些清理:D

/(\S*([^n]g|[^r]k))\s(g[^lr]|k|c[^ieyh])/