0

After a lot of googling, asking question on here. I want to be able to search a string to verify that one word precedes the other (in php), but not necessarily adjacent to each other. I was so sure it would be simple, but struggled to find an answer!

4

4 に答える 4

1

それが唯一の要件である場合、おそらく:

if(($pos = strpos($haystack, $first_word)) !== false && strpos($haystack, $second_word, $pos)) {
    // $second_word found after $first_word
}
于 2013-11-14T18:11:47.820 に答える
0

これを試すことができます:

if (preg_match('~^(?>[^bg]+|\B[bg]|b(?!adword\b)|g(?!oodword))*+\bgoodword\b~', $str, $match))
    echo 'ok';
else
    echo 'fail';

("b")の最初の文字を使用する必要があり、その後に次の文字が"badword"ない場合にのみ使用できます。"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';
}
于 2013-11-14T18:37:27.400 に答える
0

最初は 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);
于 2013-11-14T19:01:45.480 に答える
0

多分これ

 #  ^(?:(?!word_after).)*word_before(?:(?!word_after|word_before).)*word_after(?:(?!word_before).)*$

 ^ 
 (?:
      (?! word_after )
      . 
 )*

 word_before 

 (?:
      (?! word_after | word_before )
      . 
 )*

 word_after

 (?:
      (?! word_before )
      . 
 )*
 $ 
于 2013-11-14T18:55:57.700 に答える