有没有办法从正在使用量词的正则表达式中获取多个捕获组?例如,假设我有这些数据(简化了我必须处理的内容):
<td>Data 1</td>
<td>data 2</td>
<td>data 3</td>
<td>data 4</td>
Run Code Online (Sandbox Code Playgroud)
现在,如果我写这样的正则表达式:
(?:<td>(.+?)<\/td>\s*){4}
Run Code Online (Sandbox Code Playgroud)
我最终只有一个捕获组,最后一个是"数据4".有没有办法使用量词并最终得到4个捕获组,或者我被迫写这样的正则表达式来得到我想要的东西:
<td>(.+?)<\/td>\s*<td>(.+?)<\/td>\s*<td>(.+?)<\/td>\s*<td>(.+?)<\/td>
Run Code Online (Sandbox Code Playgroud)
是的,我很清楚我可以通过编程方式更容易地破解这个简单的例子然后应用和必要的正则表达式或更简单的模式匹配.我正在使用的数据要复杂得多,我真的想使用正则表达式来处理所有的解析.
使用php,您可以使用preg_match_all
:
$str = '<td>Data 1</td>
<td>data 2</td>
<td>data 3</td>
<td>data 4</td>
';
preg_match_all('/(?:<td>(.+?)<\/td>\s*)/', $str, $m);
print_r($m);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => Array
(
[0] => <td>Data 1</td>
[1] => <td>data 2</td>
[2] => <td>data 3</td>
[3] => <td>data 4</td>
)
[1] => Array
(
[0] => Data 1
[1] => data 2
[2] => data 3
[3] => data 4
)
)
Run Code Online (Sandbox Code Playgroud)