我正在寻找是否有办法在正面观察后为每个逗号分隔列表获取匹配组。
例如
#summertime swimming, running, tanning
正则表达式(到目前为止)
(?<=#summertime\s)(.+)
返回
["swimming, running, tanning"]
期望的结果
["swimming", "running", "tanning"]
答案 0 :(得分:2)
答案 1 :(得分:1)
在PCRE / perl中解决此问题的经典方法是使用\K
escape sequence和\G
anchor:
(?: # non-capturing group
\#summertime\b # match #summertime
| # or
\G(?<!^), # a comma not at the beginning of string and match it only if it's after the last match
) # closing the non-capturing group
\s* # some optional whitespaces
\K # forget what we matched so far
[^\s,]+ # match anything that's not a whitespace nor a comma one or more times
关于正则表达式的一些注释:
x
修饰符进行白色间距模式。g
修饰符来匹配所有修饰符。在php中,您需要使用preg_match_all()
。#summertime
中的主题标签,因为主题标签用于白色间距模式下的注释。\G(?<!^)
是从最后一点而不是从字符串/行的开头进行匹配的经典方式。您也可以在此表单\G(?!^)
或(?!^)\G
中看到它。请记住,它都是零宽度。\K
是awesome。[^\s,]+
但您也可以使用\w+
或者更适合您的需求。\s*,\s*