正则表达式基础:带星号的preg_match()值

时间:2015-12-28 21:37:18

标签: php regex preg-match

我有这个正则表达式:

preg_match("/(comment|vid|nice)/i", $id)

我希望vid部分与videoivideo匹配。

vid中添加星号的正确方法是什么,以便与这些条款匹配?

3 个答案:

答案 0 :(得分:1)

您可以使用\p{L}* \p{L}匹配任何大写和小写字母,*是匹配零次或多次的量词:

(comment|\p{L}*vid\p{L}*|nice)

请参阅regex demoPHP demo

$re = '/(comment|\p{L}*vid\p{L}*|nice)/';
$s = "new ivideo";
if (preg_match($re, $s, $m)) {
    echo $m[0];
}

答案 1 :(得分:0)

当然有很多选择,但想到的是

preg_match("/(comment|[\w-]*vid[\w-]*|nice)/i", $id)

,而

  1. \w匹配A-Za-z0-9_
  2. -只匹配-
  3. [...]是一个字符类,因此它匹配1.和2。
  4. *表示匹配0次或更多次
  5. 顺便说一句,你只需使用像http://www.regextester.com这样的在线测试人员就可以摆弄比赛。

答案 2 :(得分:0)

我愿意

preg_match("/(comment|i?vid|nice)/i", $id)

?使前面的i可选。

Regex 101演示:https://regex101.com/r/tK2iK2/1

PHP演示:https://eval.in/494456

if(preg_match("/(comment|i?vid|nice)/i", 'video-player-5681ad0a08875')) {
     echo 'It is a match';
} else {
     echo  'It is not a match';
}