加入两个正则表达式或在同一个正则表达式中做同样的事情

时间:2015-03-11 11:18:30

标签: php html regex string

得到这个字符串:

<td>26/02/2015</td><td>09:00</td><td>26/02/2015</td><td>12:00</td><td>3</td><td>I1/121</td><td>10074 codification</td><td>103126 Codification, Cooperation and development - 11</td><td>Walter Shelter, Mary; Johnson Smith, Robert; Dickinson Queen Patty</td><td>without group</td>

我想提取下一个信息:

02 103126-11 Walter Johnson Dickinson

我可以弄清楚如何使用正则表达式获取02 103126-11 Walter部分:

$nodup_filtertoexec = preg_match('/\d{2}\/(\d{2})\/\d{4}.*?\d+\s.*?(\d+)\s.*?-\s(\d+).*?(?:.*?<td>){1}([a-zA-ZñÑ]+).*/m', $filtered, $matches);

所以问题是我无法意识到如何在;之前获得每秒值的第一个姓氏值。

以下是regex101与实际正则表达式regex to get 02 103126-11 Walter values

的链接

获得三个姓氏的正则表达式是:

(?:(?<=^)|(?<=; ))\w+

这是regex101示例:

regex to get the Walter Johnson Dickinson values

因此,最好知道如何将两个正则表达式连接在一起。

更新 这是我最近的尝试,但尚未按预期工作。只需要知道如何迭代正则表达式的最后一部分,从html获得“Proof”和“Prooftwo”或“Proofthree”(如果存在)等等。任何帮助将不胜感激。

我一直在测试(?&lt; =;)和(?=;)没有运气。

https://regex101.com/r/oQ1fJ1/4

1 个答案:

答案 0 :(得分:1)

我做了一些测试,如果你有3个字可以搞定:

\d{2}\/(\d{2})\/\d{4}.*?\d+\s.*?(\d+)\s.*?-\s(\d+).*?(?:.*?<td>){1}([a-zA-ZñÑ]+)[^;]+; ([a-zA-ZñÑ]+)[^;]+; ([a-zA-ZñÑ]+)

关键是要获得;之后的第一个单词:

{1}([a-zA-ZñÑ]+)[^;]+; ([a-zA-ZñÑ]+)[^;]+; ([a-zA-ZñÑ]+)

https://regex101.com/r/tM9nW3/1

如果你认为元素的数量不是静态的,你当然可以将它们分组(regex){2}