正面看后面跟着逗号分隔列表

时间:2014-08-28 05:08:19

标签: regex

我正在寻找是否有办法在正面观察后为每个逗号分隔列表获取匹配组。

例如

#summertime swimming, running, tanning

正则表达式(到目前为止)

(?<=#summertime\s)(.+)

返回

["swimming, running, tanning"]

期望的结果

["swimming", "running", "tanning"]

2 个答案:

答案 0 :(得分:2)

在php中你可以通过PCRE动词(*SKIP)(*F)

来做到这一点
(?:^(?:(?!#summertime).)*$|^.*?#summertime)(*SKIP)(*F)|\w+

DEMO

答案 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中看到它。请记住,它都是零宽度。
  • \Kawesome
  • 我使用了[^\s,]+但您也可以使用\w+或者更适合您的需求。
  • 有点晚了,但您可以使用自己的解决方案,然后按\s*,\s*
  • 拆分

Online demo