php - 正则表达式匹配父组中的重复组
问题描述
我试图匹配另一个组下的多个组。
输入
182507 { 6661(T) }, 182514 { 5551(T), 5553(T), 5552(T) }
输出
Full match: 182507 { 6661(T) }
Group 1: 182507
Group 2: 6661(T)
Full match: 182514 { 5551(T), 5553(T), 5552(T) }
Group 1: 182514
Group 2: 5551(T)
Group 3: 5553(T)
Group 4: 5552(T)
我尝试了这种模式,但似乎没有我例外的工作
/([0-9]+)\s*\{\s*(\s*[0-9]+\s*\(\s*[A-Z]+\s*\))\s*?(?:,*\s*([0-9]+\s*\(\s*[A-Z]+\s*\))\s*)*+\s*\}+/
解决方案
您的问题是重复捕获组仅捕获该组的最后一个匹配项,因此您的正则表达式不会捕获5553(T)
字符串的第二部分。使用两步方法执行此操作可能更简单,首先匹配数字后面的部分 in {}
,然后将第二部分拆分为其组件:
$string = '182507 { 6661(T) }, 182514 { 5551(T), 5553(T), 5552(T) }';
preg_match_all('/(\d+)\s*{\s*([^}]+)\s*}/', $string, $matches);
$output = array();
foreach ($matches[1] as $key => $value) {
$output[$key] = array_merge(array($value), preg_split('/\s*,\s*/', $matches[2][$key]));
}
print_r($output);
输出:
Array
(
[0] => Array
(
[0] => 182507
[1] => 6661(T)
)
[1] => Array
(
[0] => 182514
[1] => 5551(T)
[2] => 5553(T)
[3] => 5552(T)
)
)
推荐阅读
- javascript - 使连续的按钮点击异步
- python - 如何检查一个字符串在 python 中是否有多个特定字符。示例 字符串 'mood' 显然有两个 'o' 字符
- c - Windows 下 feof() 的古怪行为
- c++ - 如何将映射从类构造函数传递到类中的另一个函数
- c# - 实体类型“消息”中有多个导航指向同一组属性 - 使用 ForeignKeyAttribute 的“MessageFrom”
- javascript - 如何通过单击元素而不调用绑定在该标签上的单击功能来获取元素的 id
- perl - 这个 Short-Circuit OR 运算符在什么情况下会返回这个排序函数的第二个定义?
- python-3.x - 如何逐行读取 .txt 文件并使用它登录大量帐户(Python、Selenium)
- python - 如何从多对多连接表中检索信息
- angular - Angular 7 不发送 HTTP Post 请求数据