正则表达式:给定标签内的单个列表项

时间:2018-03-13 13:32:09

标签: php regex

我想知道是否存在" one-regex-solution"对于我当前的问题(在PHP中):

假设有许多文件,其中包含以下类似的代码方案:

<p class="first-names">
Stan, Mary-Ann, William 3rd, Big Jim, Joe, Samantha
</p>

我想单独匹配文件中的所有名字,我想知道这是否可以用一个正则表达式完成?

我到目前为止尝试了以下内容,它提供了完整列表和最后两个第一个名字(JoeSamantha),但不是完整列表:

/(?<=<p class="first-names">)\W*(?:([a-zA-Z0-9\s-]{3,})+(?:, ))*(.*?)(?=[\W\ ]*<\/p>)/s

我知道,这是一个两步法

a)获取<p> - 标签

之间的所有内容

b)a)

的分割结果

这有效,但我正在寻找像

这样的东西
<Start_after_this_to_look_for_pattern> (?:(<Pattern>)<Separator>?){1 to many}<don't_look_after_this_for_pattern>

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

实际上,您可以使用\G构造:

(?:\G(?!\A)|<p[^>]*>\s*)
(?P<prename>(?:(?!</p>)[^,])+),?\s*

a demo on regex101.com

<小时/> 如上所述,尽管如此,最好使用带有xpath查询的解析器,并将内容拆分为,