2013-09-11 69 views
0

我目前试图在PHP中的空字符串上获得匹配,这个当前运行应该匹配not和空'',但我似乎只能得到它匹配not出于某种原因?有人能告诉我我做错了什么吗?字边界匹配空字符串

preg_match('/^\bnot|$/', 'not', $matches); 
print_r($matches); // array(0 => 'not') // correct 

preg_match('/^\bnot|$/', '', $matches); 
print_r($matches); // array(0 => '') // maybe right ? 

preg_match('/^\bnot|$/', 'foo', $matches); 
print_r($matches); // array(0 => '') // deff messed up 
+0

您究竟想在这里匹配什么?在主题开始之后的单词边界是多余的;为什么不只是'如果($ str =='不')'?或者应该以'not'开始? –

回答

1

这是因为您试图错误地匹配空字符串。你的正则表达式应该是。

^$|pattern 

而且随着\b(字边界),这从\w(字字符)匹配到\W(非字字符)。它实际上是一个零宽度匹配(空字符串),但只匹配字边界中特定位置的那些字符串。

+0

正是我在找什么,非常感谢你=) – ehime

0

如果要确定字符串是否为空,请不要使用preg_match。使用strlen();

$string = ''; 
$strlen = strlen($string); 
if ($strlen === 0) { 
    // $string is empty 
} 
+0

这需要是一个正则表达式,这是行不通的。 – ehime