经过大量的谷歌搜索,在这里提问。 我希望能够搜索一个字符串来验证一个单词在另一个单词之前(在 php 中),但不一定彼此相邻。 我非常确定这会很简单,但很难找到答案!
如果这是唯一的要求,那么也许:
if(($pos = strpos($haystack, $first_word)) !== false && strpos($haystack, $second_word, $pos)) {
// $second_word found after $first_word
}
也许这个
# ^(?:(?!word_after).)*word_before(?:(?!word_after|word_before).)*word_after(?:(?!word_before).)*$
^
(?:
(?! word_after )
.
)*
word_before
(?:
(?! word_after | word_before )
.
)*
word_after
(?:
(?! word_before )
.
)*
$
起初我想建议你使用 strpos(),但如果您需要匹配确切的单词,它可能不起作用。我正在调查这样的事情:
function AbeforeBinC($a, $b, $string)
{
$aStr = explode(' ', strtolower($string));
foreach($aStr AS $k => $s)
{
if($a == $s){ $a = $k; }
if($b == $s){ $b = $k; }
}
var_dump($a < $b);
}
$str = "We are here to take care of you";
AbeforeBinC('are', 'take', $str);
你可以试试这个:
if (preg_match('~^(?>[^bg]+|'B[bg]|b(?!adword'b)|g(?!oodword))*+'bgoodword'b~', $str, $match))
echo 'ok';
else
echo 'fail';
您必须采用"badword"
的第一个字母("b"),并且只有在后面没有"adword"
时才允许它
^
是字符串开头的锚点
'b
是词界,'B
则相反。
(?!...)
的意思是"不跟随"
一些文本存储到变量中的示例:$text_before
,$text_after
$flb = preg_quote($text_before[0]);
$fla = preg_quote($text_after[0]);
$subb = substr($text_before, 1);
$suba = substr($text_after, 1);
if( preg_match('~^(?>[^' . $flb . $fla . ']+|'B[' . $flb . $fla ']|'
. $flb . '(?!'Q' . $subb . ''E'b)|'
. $fla . '(?!'Q' . $suba . ''E'b))*+'b'
. $text_after . ''b~', $str, $match) ) {
echo 'ok';
} else {
echo 'fail';
}