perl样式正则表达式匹配列表中的第n项

时间:2013-09-27 00:17:52

标签: regex

尝试匹配此列表中的第三项:

/text word1, word2, some_other_word, word_4

我尝试使用这种perl风格的正则表达式无济于事:

([^, ]*, ){$m}([^, ]*), 

我想只匹配第三个单词,之前或之后没有任何内容,也没有逗号或空格。我需要它是一个正则表达式,这不是一个程序,而是一个word文件的UltraEdit。

我可以使用什么来匹配some_other_word(或列表中的第三个。)

3 个答案:

答案 0 :(得分:2)

根据社区成员的一些意见,我做了以下更改,使正则表达式模式的逻辑更加清晰。

/^(?:(?:.(?<!,))+,){2}\s*(\w+).*/x

解释

 /^ # 1.- Match start of line.
 (?:(?:.(?<!,))+ # 2.- Match but don't capture a secuence of character not containing a comma ...
 ,)              # 3.- followed by a comma  
 {2}             # 4.- (exactly two times) 
 \s*             # 5.- Match any optional space
 (\w+)           # 6.- Match and capture a secuence of the characters represented by \w a leat one character long. 
  .*             # 7.- Match anything after that if neccesary.
  /x     

这是之前建议的。

/(?:\w+,?\s*){3}(\w+)/

答案 1 :(得分:1)

尝试此正则表达式的第1组:

^(?:.*?,){2}\s*(.*?)\s*(,|$)

使用您的示例查看live demo,加上边缘案例,输入显示第1组中的捕获。

答案 2 :(得分:0)

它不能一次只返回一个匹配项,因为您的字符串有多个相同模式的出现Regular Expression没有选择性回报选项! 所以 你可以从返回的数组中做任何你想做的事。

,\s?([^,]+)

See it in action,第二个匹配的组就是您所需要的。