使用 PHP,我正在尝试测试字符串中是否存在各种单词和模式,但无法弄清楚为什么我在尝试匹配某些单词时会看到奇怪的行为。
示例 1:为什么以下不返回 1?
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/(string)/i', $test, $matches);
即使主题字符串中存在单词“String”,对于上述内容,$result 始终为零。
示例 2:但是,假设我将正则表达式稍微更改为以下内容:
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/st.+(ring)/i', $test, $matches);
上面为 $result 返回值 1。好像当我把“字符串”这个词分成不同的部分时,我可以得到一个匹配。
示例 3:当我再次稍微修改此示例中的正则表达式时,它也返回零,但我不知道为什么:
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/(tring)/i', $test, $matches);
尝试匹配诸如“tring”之类的字符序列会返回 0,但在匹配“ring”时会返回 1。但是“tring”听起来不像任何类型的特殊字或保留字!
这种行为对于“document”和“unescape”等各种其他词也是相同的,我相信还有很多其他词。
我假设正则表达式引擎可能对某些单词进行了不同的处理,因为它们可能以某种方式被保留或特殊,但我无法找到上述行为的官方解释。
如果我遗漏了一些非常明显的东西,我深表歉意,如果有人可以向我解释这一点,我将不胜感激。非常感谢。