找到美元符号的单词

时间:2017-07-31 16:24:00

标签: php regex preg-match preg-match-all

我试图使用正则表达式找到带有第一个字符($)的单词,但我无法使其工作。 我试过了:

$string = '$David is the cool, but $John is not cool.';
preg_match('/\b($\w+)\b/', $string, $matches);

我试图逃避$但仍然无效:

preg_match('/\b(\$\w+)\b/', $string, $matches);

我想提取[$ David,$ John]。

请帮忙!

2 个答案:

答案 0 :(得分:1)

\b在非单词字符和$(另一个非单词字符)之间不匹配。

\b

相当于

(?<!\w)(?=\w)|(?<=\w)(?!\w)

所以你可以使用

/(?<!\w)(\$\w+)\b/

那就是说,可能没有理由检查$之前的内容,所以以下内容应该这样做:

/(\$\w+)\b/

此外,\b将始终匹配,因此可以省略。

/(\$\w+)/

此外,您似乎想要所有匹配项。为此,您需要使用preg_match_all代替preg_match

答案 1 :(得分:0)

如前所述,不需要使用单词边界和非单词边界,但为了匹配其他变量,你必须使用preg_match_all

$string = '$David is the cool, but $John is not cool.';
preg_match_all('/(\$\w+)/', $string, $matches);
print_r($matches);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => $David
            [1] => $John
        )

    [1] => Array
        (
            [0] => $David
            [1] => $John
        )

)