将正则表达式转换为php中许多字符串之一
我对正则表达式是完全陌生的,我想匹配值是否为以下任一值 cs,ch,es,ee,it,我 到目前为止,我一直在努力将正则表达式转换为php中许多字符串之一,php,regex,Php,Regex,我对正则表达式是完全陌生的,我想匹配值是否为以下任一值 cs,ch,es,ee,it,我 到目前为止,我一直在努力 if (preg_match("/^[cs|ch|es|ee|it|me]{2}$/",$val)) echo "true"; else echo "false"; 对于真实情况,它可以正常工作,但对于相反的情况,如sc、hc等,它也会返回true。 此外,如果您参考一些好的源代码/书籍来学习PHP,这将非常有用。您必须使用分组分隔符(括号)。字符类分隔符(方括号
if (preg_match("/^[cs|ch|es|ee|it|me]{2}$/",$val))
echo "true";
else
echo "false";
对于真实情况,它可以正常工作,但对于相反的情况,如sc、hc
等,它也会返回true。
此外,如果您参考一些好的源代码/书籍来学习PHP,这将非常有用。您必须使用分组分隔符(括号)。字符类分隔符(方括号)用于匹配字符范围
/^(cs|ch|es|ee|it|me)$/
如果只使用正则表达式匹配某些内容(而不捕获任何内容),则可以使用(?:)
分组
/^(?:cs|ch|es|ee|it|me)$/
学习正则表达式的一个更好的网站是。从正则表达式中删除字符类
[]
,并使用()
包装它们。同时删除{2}
,因为它不再需要了
if (preg_match("/^(cs|ch|es|ee|it|me)$/",$val))
这就可以了。您需要使用()
而不是[]
/^(cs|ch|es|ee|it|me)$/
注意:使用括号时不要使用{2}
因此,您的最终代码是:
if (preg_match("/^(cs|ch|es|ee|it|me)$/",$val))
echo "true";
else
echo "false";
要学习php的正则表达式,我建议这本书是一本很好的快速参考书,或者更多的参考问题。你知道[]是做什么的吗 让我们举一个例子[abcdef] 它将匹配方括号中提到的任何字母,假设您提供:
^[cs | ch | es | ee | it | me]{2}$
它将匹配列表中的单个字符cs | heitm
你可以在任意时间添加一个字母,但只能匹配一次
因此,它将匹配两个字母的任何单词,如您所述,以字母cs|heitm
因此,它将匹配cs
hs
|s
等
希望您能理解:)
更正的正则表达式应为
/^(cs|ch|es|ee|it|me)$/
这将匹配精确的文字,而不是字母