我对正则表达式来说是全新的,如果值是以下任何一个
,我想匹配CS,CH,ES,EE,它,我
直到现在我已经尝试了
if (preg_match("/^[cs|ch|es|ee|it|me]{2}$/",$val))
echo "true";
else
echo "false";
它适用于真实案例,但如果sc,hc
等等也会返回true。
如果您推荐一些优秀的资源/书籍来学习PHP,那将会非常有用。
答案 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";
答案 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)$/
这将匹配确切的文字而不是字母。