使用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);
对于上面的结果,$ result总是为零,即使单词&#34; String&#34;存在于主题字符串中。
示例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。好像当我分开单词&#34; string&#34;分成几部分,我可以得到一个匹配。
示例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);
尝试匹配字符序列,例如&#34; tring&#34;返回0但是在&#34; ring&#34;上匹配时它返回1.但是&#34; tring&#34;听起来不像任何类型的特殊或保留词!
此行为对于其他各种单词也是相同的,例如&#34; document&#34;和&#34; unescape&#34;而且我确定还有很多其他人。
我假设正则表达式引擎可能会对某些单词进行不同的处理,因为它们可能会以某种方式保留或特殊,但我无法找到上述行为的官方解释。
如果我遗漏了一些非常明显的东西,我很抱歉,如果有人可以向我解释,我会非常感激。 非常感谢。
答案 0 :(得分:1)
我认为你的第一个正则表达式很好。看这里 https://regex101.com/r/tO9vN8/1
但是charset似乎有问题,我不得不重写表达式 - 如果我从这个网站复制,正则表达式不匹配。
我希望这将是正确的方向......