php - 使用 preg_match 来匹配此特定模式

标签 php regex preg-match

我有一个针对特定模式的 preg_match 匹配,但它与我尝试匹配的模式不匹配。我究竟做错了什么?

<?php

$string = "tell me about cats";
preg_match("~\b(?:tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+ ){1,2})$~", $string, $match);
print_r($match);

?>

预期结果:

数组(0 => 告诉我 1 => 猫)

实际结果:

数组()

最佳答案

中有一个额外的空格(但是 cat 之后没有空格,导致整个正则表达式失败)

((?:[a-z]+ ){1,2})
          ^^
          ||
         here

此外,您没有第一部分的捕获组(由于(?:..))。使用 ? 创建一个捕获组并将空格设为可选 (如果您想捕获最多两个单词)

\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+){1,2} ?)$

<强> Regex Demo

PHP 代码

$string = "tell me about cats";
preg_match("~\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+ ?){1,2})$~", $string, $match);
print_r($match);

注意:- $match[1]$match[2] 将包含您的结果。 $match[0] 保留用于字符串中正则表达式找到的整个匹配。

<强> Ideone Demo

关于php - 使用 preg_match 来匹配此特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506387/

相关文章:

php - 正则表达式在某些情况下不起作用 - PHP

php - 拆分时间戳记录

regex - 有人可以准确解释这些 gsub 参数吗?

regex - vim: 为什么空格字符在方括号表达式中不起作用,但\n却可以

php - 警告 : preg_match() [function. 预匹配]:未知修饰符 '('

php - 预匹配 :/usersname or/username/foo

php - 过滤用户输入

php - CakePHP Controller 别名

javascript - 确认电子邮件进入垃圾邮件而不是收件箱

c# - 正则表达式验证属性无法正常工作