2013-05-04 102 views
10

我试图验证我的字符串是否匹配模式。也就是说,完整的字符串可以写成该模式。 但是preg_match返回true,如果有任何子字符串匹配该模式。 (如preg_match("#[a-z]*#, "333k")返回1,我不想。 在这个例子中,我宁愿验证,整个字符串只含有少量的拉丁字母。)PHP preg_match完整字符串

回答

13

您使用开始年底标记,^$,以指示正则表达式模式中字符串的开始和结束。这样你可以使表达式只匹配整个字符串,而不是任何种类的子字符串。在你的情况下,它会再看看这样的:

preg_match("#^[a-z]*$#", "333k"); 

还可以,有一个这些标记,指定该模式必须只匹配开头或字符串的结尾。

+0

啊,感谢您的超级快速帮助,现在就开始工作。 – user2089648 2013-05-04 15:27:06

1

请注意,要将字符串匹配定位在字符串的开始和结尾处,您可能还要考虑使用\A\z定位点。

preg_match('~\A[a-z]*\z~', "333k"); 
      ^^  ^^ 

\A\z明确开始和PHP的正则表达式字符串锚端(如他们的行为不依赖于任何正则表达式修饰符,即使你指定m MULTILINE修改,他们将继续主张字符串开始/结束位置)。请参阅PHP documentation中有关PHP正则表达式锚点的更多信息。

谨防\Z虽然:\Z将在最后一个简单的换行在之前的整个字符串匹配,而\z将只匹配在字符串的尽头,那就是,有字符串中的所有字符后(见Whats the difference between \z and \Z in a regular expression and when and how do I use it?