我试图了解更多关于环视断言的信息,我发现了这个线程,他们的解决方案应该适用于某些引擎,但不适用于 PHP,因为 PHP 要求环视断言是固定长度的。
我想要的是使相同的场景在 PHP 中工作,或者至少知道它是否可能。
我试图减少正则表达式规则的解释,所以它与我上面提到的线程中的不同,但它遵循相同的原则。
需要匹配一个字符串,内置三部分:
- 以任意数量的字母数字字符开头
- 不包含“abc-”后跟 3 到 5 个数字和/或连字符
- 以“.htm”或“.html”结尾
因此,这些将匹配:
- xxxyz-123.html
- xx123-abc.htm
- xxabc123.html
- xxabc-123-45.htm
但这些不匹配:
- xxabc-4324.htm
- xxabc-1-2.html
- xxac-12-34.txt
- xxabc-12345.htm
我一直在尝试下面的正则表达式模式的一些变体,但它不起作用 - 由于固定长度限制,这种特殊情况:
.*(?<!abc-[\d-]{3,5})\.htm[^l]?$
我还使用了不同的测试字符串,忘记了 3-5 范围部分,只关注 3 个数字和/或连字符,并使用了下面的正则表达式,但它仍然不起作用,这就是为什么我决定寻求帮助:
.*(?<!abc-[\d-]{3})\.htm[^l]?$
你们中的任何人都可以在这里帮助我吗?
编辑
这是我的测试 PHP 代码:
$regex = "/^(?!.*abc-[\d-]{3,5})[a-zA-Z0-9-]+\.html?$/";
foreach ( $matching2 as $k => $v ) {
$matches = preg_match( $regex, $v );
echo '"', $v, '"', ( $matches != 0 ) ? ' matches' : ' doesn\'t match', '<br />';
}