PHP正则表达式匹配字符串中两个值的问题求助
正则匹配问题解决方案
问题分析
你的正则存在三个核心问题:
- 使用
|分支匹配导致捕获组结果分散在$matches的不同索引里,无法直接得到期望的一维数组 - 错误使用了HTML实体
\>和\",但目标字符串里是实际的>和"字符,不需要转义实体 - 你只需要提取两个特定值,
preg_match_all会匹配所有符合分支的结果,用preg_match更合适
修正后的代码
$string = 'MorText "gets(183,);inc();" for="text">Sweet" Mo'; preg_match('/gets\((\d+)\,.*?>([^"]+)/', $string, $matches); // 整理出期望的结果数组 $result = [ (int)$matches[1], $matches[2] ]; print_r($result);
正则规则说明
gets\((\d+)\,:精准匹配gets(,捕获其中的连续数字(\d+匹配1个及以上数字),直到遇到逗号.*?>:用非贪婪模式匹配任意字符,直到遇到第一个>([^"]+):捕获>之后到第一个"之前的所有字符([^"]+匹配非双引号的任意字符)
最终输出
Array ( [0] => 183 [1] => Sweet )
内容的提问来源于stack exchange,提问作者Romil
相关产品推荐
相关产品推荐

