1

文字列を検索して単語を見つけるための検索関数をコーディングしようとしています

たとえば、php+mysqlのように

Select * From Column Where ID Like %Word%

Pregmatchallとregexを使用して同じアイデアをコーディングしようとしました

これが私のコードです

$strings = '
( monstername 205 "Devil Troop of Desire")
( monstername 206 "  Devil Troop of Pain     "  )
( monstername 207       "Devil Troop of Greed")
( monstername 208   "       Devil Troop of Jealousy  ")
( monstername 207 "Mask Troop of Greed"  )';

preg_match_all('/monstername\s*(.*?)\s*\"\s*\\b(Jealousy)\b\s*\"\s*\)/i', $strings, $matches, PREG_SET_ORDER);
foreach ($matches as $match){list (, $MonsterNumber) = $match;
echo "$MonsterNumber";
}

出力は次のようになります

208

しかし、それは正しい出力を表示しません

嫉妬を嫉妬の悪魔部隊に置き換えると表示されます

私はphp+mysqlの同じアイデアをやりたいだけです

IDが%Word%のように

モンスターの数を見つけるために完全な文字列を与えることなく

4

3 に答える 3

0

この部分"\s*\\b(Jeaでは、引用符と単語の先頭の間に空白以外の文字を使用できません。おそらく".*\\b(Jea、単語の後に同じ問題があるように、それらの間に任意の文字(または何もない?)が必要でした。

于 2012-11-01T10:53:25.573 に答える
0

検索対象をより適切に定義する必要があります。Jealousy の前後に、スペース/スペース以外、引用符以外の文字が含まれる場合があります。

preg_match_all('/\( monstername\s*(\d+)\s*"\s*([^"]*\bJealousy\b[^"]*)\s*"\s*\)/i',
$strings, $matches, PREG_SET_ORDER);

または、検索スクリプトで使用するには、

preg_match_all('/\( monstername\s*(\d+)\s*"\s*([^"]*(Jealousy)[^"]*)\s*"\s*\)/i',
$strings, $matches, PREG_SET_ORDER);

一致するモンスターごとに、一致する行、モンスター番号、モンスター名、一致したパターンが返されます。

Array
(
    [0] => Array
        (
            [0] => ( monstername 208   "       Devil Troop of Jealousy  ")
            [1] => 208
            [2] => Devil Troop of Jealousy
            [3] => Jealousy
        )
)
于 2012-11-01T10:56:35.327 に答える
0

出力としてモンスター番号のみが必要な場合は、先読みと後読みのために、この正規表現は数字のみに一致し、その周りには何も一致しません。

/(?<=monstername\s)\d+(?=.*Jealousy.*)/i

ただし、これを使用すると、「モンスター名」と数字の間に空白文字を 1 つしか使用できません。

于 2012-11-01T11:04:37.220 に答える