我有一个字符串,我需要查看它是否包含以下“_archived”。
我使用以下内容:
preg_match('(.*)_archived$',$string);
但得到:
Warning: preg_match() [function.preg-match]: Unknown modifier '_' in /home/storrec/classes/class.main.php on line 70
我是正则表达式的新手,所以这可能很容易。
或者我应该使用更简单的东西,比如
strstr($string, "_archived");
提前致谢
答案 0 :(得分:7)
strstr($ string,“_ cherived”);
对于你描述的问题会更容易。
经常被引用
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 - 杰米·扎温斯基
答案 1 :(得分:6)
preg_match('/_archived/',$string);
分隔符可以是很多不同的字符,但通常的选择是/,#和!。从PHP手册:
任何字符都可以用于分隔符,只要它不是字母数字,反斜杠()或空字节。如果必须在表达式本身中使用分隔符,则需要使用反斜杠进行转义。从PHP 4.0.4开始,您还可以使用Perl-style(),{},[]和<>匹配分隔符。
阅读有关PHP正则表达式语法here的所有内容。
您可以在PHP manual here中看到一些有效(和无效)模式的示例。
答案 2 :(得分:1)
你只需要一些分隔符,例如用/
括起模式preg_match('/_archived$/',$string);
Perl正则表达式允许您使用任何分隔符,如果您的正则表达式使用/很多,这是很方便的。我经常发现自己使用大括号,例如:
preg_match('{_archived$}',$string);
另外,请注意,您不需要(。*)位,因为您没有在“_archived”之前捕获该位,您只是在测试以查看字符串是否以它结尾(该符号位于end匹配字符串的结尾)
答案 3 :(得分:1)
如果您要查找的是字符串是否包含字符串,那么请务必使用简单版本。但你也可以这样做:
preg_match('/_archived/', $string);
答案 4 :(得分:0)
尝试:
preg_match('/(.*)_archived$/',$string);
如果你只检查字符串是否存在于$ string中,那么strstr应该足够了。
答案 5 :(得分:0)
strstr()或strpos()会更好地找到这样的东西。您得到的错误是由于您的正则表达式周围没有任何分隔符。尝试使用
"/(.*)_archived$/"
或
"#(.*)_archived$#".
答案 6 :(得分:0)
......可能是实现这一目标的最佳方式。你是正确的,正则表达式是矫枉过正。
答案 7 :(得分:0)
当你有一个特定的字符串,你正在寻找,使用正则表达式有点矫枉过正。你可以在这里使用PHP的标准字符串搜索功能之一。
strstr函数可以工作,但传统的PHP Wisdom(读作:myth,legend,superstition,the manual)表示使用strpos函数会产生更好的性能。即,像
if(strpos($string, '_archived') !== false) {
}
你会想在这里使用真正的不等式运算符,因为strpos在它的大海捞针开头找到一个针时会返回“0”。有关详细信息,请参阅the manual。
关于你的问题,PHP的正则表达式引擎要求你用一组分隔符包围你的正则表达式字符串,分隔符可以是许多不同字符之一(“/”或“|”或“(”或“) {“或”#“或者......)。PHP引擎认为你想要一个正则表达式
.*
带有一组
的模式修饰符_archived$
因此,将来,当您使用正则表达式时,请尝试类似
的内容//equivilant
preg_match('/(.*)_archived$/i',$string);
preg_match('{(.*)_archived$}i',$string);
preg_match('#(.*)_archived$#i',$string);
“/”,“#”和“{}”字符是您的分隔符。它们不用于匹配,它们用于告诉引擎“这些字符之间的任何内容都是我的注册表。最后的”i“是一个模式修饰符,表示不区分大小写。这没有必要,但是我把它包含在这里,这样你就可以看到模式修饰符的样子,并帮助你理解你为什么需要分隔符。
答案 8 :(得分:0)
如果您使用T-Regx
,则不必记住分隔符pattern('_archived$')->matches($string)