2011-03-26 72 views

回答

8

PHP 有一流的正则表达式。

您将需要使用默认PCRE extension提供的功能。抱歉。这是一个反斜杠逃跑的噩梦,但这是我们所有的。现在的PCRE版本可以很好地理解Unicode,甚至不需要使用它们,甚至不需要使用它们,甚至更好如果PHP本身就是无知了。)


关于反斜杠逃逸的噩梦,你可以用单引号括住包含正则表达式,而不是双打的字符串,采摘保持恐惧降到最低一个适当的分隔符。比较:

"/^http:\\/\\/www.foo.bar\\/index.html\\?/" 

'!^http://www.foo.bar/index.html\?!' 

里面单引号,你只需要反斜杠反斜杠逃逸和单引号,并且选择不同的分隔符避免了需要逃跑的正则表达式中的分隔符。

+0

的反斜杠逃逸的噩梦可以,如果你使用**分隔符,这不是出现在正则表达式**内减少 - 这将意味着更少的逃脱做;;;通常,当在URL或路径上使用正则表达式时,使用'/'作为分隔符并不是一个好主意。^^ ;;;见http://fr2.php.net/manual/en/regexp.reference.delimiters.php – 2011-03-26 21:48:40

+1

'ereg'已被弃用?我一定很老。 – 2011-03-26 21:48:52

+0

你可以使用不同的分隔符,以避免逃逸所有反斜杠,如果你喜欢'的preg_match(“%HTTP:// WWW \ .stackthepack \ .COM /%”,$网址)' – 2011-03-26 21:51:09

0

:)

if(substr($example, 0, 1) == " "){ echo 'whitespace!';} 

你不应该使用正则表达式是不需要的时候。

+2

但这不符合换行符,制表符等 – phihag 2011-03-26 21:48:19

+0

嗯,我认为可以使用ord(10)等来完成,但正则表达式是正确的方式。我从字面上提问,抱歉。 @Charles回答了所问。 – 2011-03-26 21:56:14

+0

这只是一个例子,因为我的伪$示例建议。这不仅仅是一个教育问题,“这是我需要做的”问题。我同意,没有正则表达式时不需要。 – 2011-03-26 22:48:48

0

还有将是microoptimization选项:

if (strstr(" \t\r\n", $example{0})) { 

{0}是一种过时的方式来获得的第一个字符(同[0]实际上)。而strstr只是检查该字符是否包含在空白字符列表中。至少在你的例子中,另一种选择是strspn