3

私はphp preg_matchを使用して、変数の最初と最後の単語を特定の最初と最後の特定の単語と一致させます。

例:

$first_word = 't'; // I want to force 'this'
$last_word = 'ne'; // I want to force 'done'
$str = 'this function can be done';

if(preg_match('/^' . $first_word . '(.*)' . $last_word .'$/' , $str))
{
     echo 'true';
}

しかし、問題は、最初または最後の文字ではなく、(開始と終了) で単語全体を強制的に一致させたいことです。

4

3 に答える 3

3

\bを検索の境界単語制限として使用:

$first_word = 't'; // I want to force 'this'
$last_word = 'ne'; // I want to force 'done'
$str = 'this function can be done';
if(preg_match('/^' . $first_word . '\b(.*)\b' . $last_word .'$/' , $str))
{
     echo 'true';
}
于 2012-07-15T07:45:56.327 に答える
3

私は少し異なる方法でこれについて行きます:

$firstword = 't';
$lastword = 'ne';
$string = 'this function can be done';
$words = explode(' ', $string);
if (preg_match("/^{$firstword}/i", reset($words)) && preg_match("/{$lastword}$/i", end($words)))
{
    echo 'true';
}

==========================================

同じことを達成する別の方法があります

$firstword = 'this';
$lastword = 'done';
$string = 'this can be done';
$words = explode(' ', $string);

if (reset($words) === $firstword && end($words) === $lastword)
{
    echo 'true';
}

最初の単語と最後の単語が正しいことがわかっているので、これは常に true を返します。それらを別のものに変更してみてください。これは true を返しません。

于 2012-07-15T07:21:44.793 に答える
0

文の開始を取得する関数を作成しましたが、正規表現ではありません。
このように最後まで書くことができます。長いので最後まで関数を追加しません...

<?php
function StartSearch($start, $sentence)
{
    $data = explode(" ", $sentence);
    $flag = false;
    $ret = array();
    foreach ($data as $val)
    {
        for($i = 0, $j = 0;$i < strlen($val), $j < strlen($start);$i++)
        {
            if ($i == 0 && $val{$i} != $start{$j})
                break;

            if ($flag && $val{$i} != $start{$j})
                break;

            if ($val{$i} == $start{$j})
            {
                $flag = true;
                $j++;
            }
        }

        if ($j == strlen($start))
        {
            $ret[] = $val;
        }
    }
    return $ret;
}

print_r(StartSearch("th", $str));

?>
于 2012-07-15T08:14:09.830 に答える