正则表达式匹配php中的许多字符串之一

时间:2014-03-21 13:34:24

标签: php regex

我对正则表达式来说是全新的,如果值是以下任何一个

,我想匹配
  

CS,CH,ES,EE,它,我

直到现在我已经尝试了

if (preg_match("/^[cs|ch|es|ee|it|me]{2}$/",$val))
    echo "true";
else
    echo "false";

它适用于真实案例,但如果sc,hc等等也会返回true。 如果您推荐一些优秀的资源/书籍来学习PHP,那将会非常有用。

4 个答案:

答案 0 :(得分:2)

从正则表达式中删除字符类[]并使用()包装它们。同时删除不再需要的{2}

if (preg_match("/^(cs|ch|es|ee|it|me)$/",$val))

这将为你做。

答案 1 :(得分:0)

您必须使用分组分隔符(括号)。字符类分隔符(方括号)用于匹配字符范围。

/^(cs|ch|es|ee|it|me)$/

如果您只使用正则表达式来匹配某些内容(而不是捕获任何内容),那么您可以使用(?:)分组。

/^(?:cs|ch|es|ee|it|me)$/

学习正则表达式的更好网站之一是regular-expressions.info

答案 2 :(得分:0)

您需要使用()代替[]

/^(cs|ch|es|ee|it|me)$/

注意:使用括号时请勿使用{2}

所以你的最终代码是:

if (preg_match("/^(cs|ch|es|ee|it|me)$/",$val))
    echo "true";
else
    echo "false";

要学习php的正则表达式我会建议this预订一个很好的快速参考或提及this问题。

答案 3 :(得分:0)

你知道[]的作用吗?

让我们举个例子[abcdef]

它会匹配方括号中提到的任何字母,假设您提供:^[cs|ch|es|ee|it|me]{2}$

它将匹配列表cs|heitm中的单个字符 你可以随时添加一个字母,但它只会匹配一次。

所以它会匹配two letters中的任何字词,正如您所提到的那样,以字母cs|heitm开头

所以它会匹配cs hs |s等。

希望你理解:)

纠正的正则表达式应该是

/^(cs|ch|es|ee|it|me)$/

这将匹配确切的文字而不是字母。