出于某种原因,我的正则表达式与我所追求的和额外的相匹配。我只需要匹配group #
,但它也匹配电话号码的第一个数字。
示例数据:
id: N group: 1 category: NAMES : Mike
id: N group: 2 category: NAMES : Seth
id: # group: 1 category: PHONE : 123-456-789
id: # group: 2 category: PHONE : 111 111-1111
id: @ group: 1 category: EMAIL : mike@mail.com
id: @ group: 2 category: EMAIL : seth@yahoo.com
正则表达式
preg_match_all('/:'s+'d/', $data, $matches);
电流输出
1
2
1
1
2
1
1
2
预期产出
1
2
1
2
1
2
通过以下方式更改正则表达式
"/group:'s*('d+)/i"
问题是您在电话和电子邮件之后还有":"
您可以提前查看,以确保立即遵循category
:
preg_match_all('/:'s+'d(?= category)/', $data, $matches);
不会捕获前瞻,但如果不存在,则字符串将不匹配。
您可以使用以下内容,这也将排除空格并为您提供完全匹配。
preg_match_all('/(?<![^ ])'d(?!'d)/', $data, $matches);
见live demo
或者为了安全起见,您可以向前看一眼。
preg_match_all('/'d(?= +category)/i', $data, $matches);
请参阅live demo
更好的是,只需简单地匹配group:
和以下数字即可。
preg_match_all('/group:'s+'K'd/i', $data, $matches);