简单的preg_match没有返回预期的结果

时间:2012-09-12 21:11:05

标签: php preg-match

我在preg比赛中经历了一些基础知识但是当你刚接触它时它很难。

我想要做的是在字符串中搜索此实例

bug1234

它不应区分大小写,因此bug1234或BuG1234应该有效 它必须是单词bug后跟任意4个数字 bug1234之间应该没有空格或任何东西,所以bug-1234不应该匹配 它应该忽略bug1234z和abug1234这样的东西所以它必须是bug1234,没有任何前缀或直接在它之后,除非之间有空格所以“bug1234有问题,我无法解决”将是一个匹配。

只是为了澄清它可以是任何数字而不是1234,但它们必须是4位

继承我的跛脚:

$file_string = $workdetails->text;
$file_string = strtolower($file_string);
$bugkey = "/bug[0-9]{4}/";
$nosey = preg_match($bugkey, $file_string);
if($nosey !== false) 
{
echo "We have a match baby!!"
}

这似乎只是返回所有排序,空字符串,s字符串,没有提到单词bug

3 个答案:

答案 0 :(得分:1)

尝试将正则表达式更改为:

/\bbug[0-9]{4}\b/i

\b修饰符仅匹配单词边界,以确保它与abug1234bug12345bug1234was bad之类的内容不匹配。我还添加了i修饰符,因此它不区分大小写。您不再需要使用strtolower

此外,preg_match通常返回一个整数,如果没有匹配则返回(int)0。它只在失败时返回FALSE。因此,您应该将匹配检查更改为:

if ($nosey > 0) {
// or just
if ($nosey) {

答案 1 :(得分:0)

试试这个:/(?ism)bug(?i-sm)[0-9]{4}/

Regular Expression Test Tool上进行了测试 有了数据:

sdfsfsbUG1234cccs

干杯!

答案 2 :(得分:0)

尝试使用:

preg_match('/\b(bug\d{4})/i', $file_string, $match);
print_r($match);

modifier i代表不区分大小写,\b代表整个单词(字边界)。