1

我正在尝试编写一个搜索函数来搜索字符串并找到单词

例如像 php + mysql

Select * From Column Where ID Like %Word%

我试图用 Preg match all 和 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 Like %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

但是这样一来,“怪物名”和数字之间只能有一个空格字符。

于 2012-11-01T11:04:37.220 回答