得到这个字符串:
<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; =;)和(?=;)没有运气。
答案 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}
。