尝试匹配此列表中的第三项:
/text word1, word2, some_other_word, word_4
我尝试使用这种 perl 风格的正则表达式无济于事:
([^, ]*, ){$m}([^, ]*),
我只想匹配第三个单词,之前或之后都没有,也没有逗号或空格。我需要它是一个正则表达式,这不在程序中,而是在 UltraEdit 中用于 word 文件。
我可以用什么来匹配 some_other_word (或列表中的第三个。)
尝试匹配此列表中的第三项:
/text word1, word2, some_other_word, word_4
我尝试使用这种 perl 风格的正则表达式无济于事:
([^, ]*, ){$m}([^, ]*),
我只想匹配第三个单词,之前或之后都没有,也没有逗号或空格。我需要它是一个正则表达式,这不在程序中,而是在 UltraEdit 中用于 word 文件。
我可以用什么来匹配 some_other_word (或列表中的第三个。)
根据社区成员的一些输入,我进行了以下更改以使正则表达式模式的逻辑更加清晰。
/^(?:(?:.(?<!,))+,){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+)/
它不能一次只返回一个匹配项,因为您的字符串多次出现相同的模式并且Regular Expression
没有选择性返回选项!所以你可以从返回的数组中做任何你想做的事情。
,\s?([^,]+)
看实际操作,第二个匹配组就是您所需要的。