我正在编写一个应该检索我传递的所有事件的函数。 我是意大利人,所以我认为我可以通过一个例子更清楚。 我会检查我的短语是否含有一些水果。
好的,让我们看看我的php代码:
$pattern='<apple|orange|pear|lemon|Goji berry>i';
$phrase="I will buy an apple to do an applepie!";
preg_match_all($pattern,$phrase,$match);
结果将是&#34; apple&#34;和&#34; applepie&#34;。
如何只搜索确切的事件? 阅读我发现的手册: http://php.net/manual/en/regexp.reference.anchors.php
我尝试使用\A
,\Z
,^
和$
,但在我的情况下似乎没有人正常使用!
有人可以帮助我吗?
编辑:在@ cris85的回答之后,我试着改进我的问题...... 我的真实模式包含200多个occorrency,而且这个短语超过10000个caracters,所以真实案例太大而无法插入此处。经过一些试验后,我发现了一个错误,就是这个问题&#34;微软交换&#34;!我必须逃脱一些特殊的角色吗? 目前我逃脱&#34; +&#34; &#34; - &#34; &#34;&#34; &#34;&#34; &#34; $&#34;和&#34; *&#34;。
答案 0 :(得分:2)
您尝试使用的锚是完整字符串,而不是每个字。您可以使用word boundaries
来匹配单个字词。这应该允许您只找到完整的水果匹配:
$pattern='<\b(?:apple|orange|pear|lemon|Goji berry)\b>i';
?:
因此您不会创建其他捕获组,而是non-capture group
。
以下是正则表达式对边界匹配的定义:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
PHP演示:https://3v4l.org/h5GCf
正则表达式演示:https://regex101.com/r/5aBaMO/1/