负Lookbehind正则表达式在PHP中不起作用
我用PHP编写了一段代码,用于匹配副词(以“ly”结尾的单词),副词应该不匹配任何每日、每周、每月、双日、双周等单词 例如,给定句子负Lookbehind正则表达式在PHP中不起作用,php,regex,Php,Regex,我用PHP编写了一段代码,用于匹配副词(以“ly”结尾的单词),副词应该不匹配任何每日、每周、每月、双日、双周等单词 例如,给定句子本地每天会面3天,只有本地应该匹配 我使用负查找锁定了正则表达式语法,但PHP向我抛出了一个错误: 编译失败:Lookback断言在偏移量处不是固定长度 以下是我在PHP中的完整代码: <?php $sentence = "Locally meet daily for next 3 days"; // Use preg_match() function to
本地每天会面3天
,只有本地
应该匹配
我使用负查找锁定了正则表达式语法,但PHP向我抛出了一个错误:
编译失败:Lookback断言在偏移量处不是固定长度
以下是我在PHP中的完整代码:
<?php
$sentence = "Locally meet daily for next 3 days";
// Use preg_match() function to check match
preg_match('/(\w+ly)(?<!(daily|weekly|monthly))/', $sentence, $matches, PREG_OFFSET_CAPTURE);
// Display matches result
print_r($matches);
您可以使用负前瞻,但它必须在您的比赛组之前。您还需要在正则表达式的开头添加断言(<代码> \b/COD>),以使(例如)正则表达式在<代码>每日< /代码>中不符合<代码> AyIL<代码>,而另一个则在中间不匹配单词“<代码> Ly <代码> >例如<代码>新婚< <代码>:
$sentence = "Locally meet daily newlywed for next 3 days";
preg_match_all('/\b(?!(?:daily|weekly|monthly))(\w+ly)\b/', $sentence, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
输出:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Locally
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => Locally
[1] => 0
)
)
)
我怎样才能排除像bidaily、biweekly这样的词呢?要么把这些词放在替换词中,要么在它前面加上(?:bi)
,即\b(?(?:bi)(?:daily | weekly | monthly))(\w+ly)
谢谢你,尼克。我用:preg_match_all('/\b(?(?:\w*(每日、每周、每月))(\w+ly)/',$句子,$matches,preg_OFFSET_CAPTURE)解决了这个问题代码>@solutionhacker这可能更简单。注意,我刚想到在正则表达式的末尾需要一个单词中断,这样你就不能在中间使用与 Ly匹配的单词。请参阅我的编辑。