简单preg_match未返回预期结果


simple preg_match not returning expected results

我在预赛中学习了一些基础知识,但当你刚开始接触时,这很难。

我想做的是在字符串中搜索这个实例

错误1234

它不应该区分大小写,因此bug1234或bug1234应该可以工作它必须是单词bug后跟任意4个数字错误1234之间不应该有空格或任何东西,因此错误-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

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

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

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

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

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

试用:

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

修饰语i表示不区分大小写,而'b仅表示整个单词(单词边界)。

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

在正则表达式测试工具上测试带数据:

sdfsfsbUG1234cccs

干杯!