0

在这篇文章之后,我正在尝试相同的任务,但是下面给出的正则表达式给了我相互矛盾的结果:

$text = "Jiaaah.. RT @mizter_popo";

$pattern = "/(^|[ ])(\RT(?=\s))/";

if(preg_match($pattern, $text)) {
    echo "correct";
} else {
    echo "wrong";
}

我预计这会给出“正确的”。在我的本地服务器上的 PHP 脚本中运行它,这里返回“错误”。在这里运行相同的逻辑返回“正确”?任何人都可以帮助解释发生了什么吗?或者也许我期望“正确”得到回应是错误的?

4

3 回答 3

1

对我来说,在这个特定的例子中删除\之前的RT工作:

$pattern = "/(^|[ ])(RT(?=\s))/";

正则表达式测试器站点可能正在做一些严格的清理工作,以确保人们不会破坏他们的站点,这可能会扭曲哪些有效,哪些无效。

于 2012-07-04T04:41:17.947 回答
0

我发现了一种使用断言而不是后视的模式。也有交替,但我敢打赌,与比我更有 REGEX 天赋的人的断言中可能会考虑到这一点......

$pattern = "/(^RT)|((?<=[ ])RT)/";
于 2012-07-04T04:43:42.507 回答
0

这段代码可以工作

if (preg_match('/(?<=^|\s)RT(?=\s)/', $subject)) {
    # Successful match
} else {
    # Match attempt failed
}

但你提到的网站无论如何都不支持这一点。

于 2012-07-04T04:44:53.820 回答