如何获取与正则表达式匹配的字符串的唯一部分?

时间:2016-10-06 23:11:05

标签: php html regex

例如,如果我有一个123Smith456%$@#***()NotSmith的HTML输入,而我只想要字母字符,我怎么能使用正则表达式来匹配并抓住Smith并将其放入变量?

1 个答案:

答案 0 :(得分:1)

您可以使用preg_match函数中的PREG_OFFSET_CAPTURE选项来执行此操作。

您的表达式需要包含在()中以对要捕获的匹配进行分组。您可以拥有任意数量的组,这样您就可以捕获各种部分并将它们存储在各种变量中。

例如:

$string = '123Smith456%$@#***()NotSmith';

preg_match('/(Smith)/', $string, $matches, PREG_OFFSET_CAPTURE);

print_r($matches);

这将输出:

Array
(
    [0] => Array
        (
            [0] => Smith
            [1] => 3
        )

    [1] => Array
        (
            [0] => Smith
            [1] => 3
        )

)

如果您希望提取所有实际的"单词"你可以这样做:

$string = '123Smith456%$@#***()NotSmith';

preg_match('/([A-Za-z]+)/', $string, $matches, PREG_OFFSET_CAPTURE);

print_r($matches);

这将匹配A-Z或a-z范围内出现一次或多次的所有字符。哪个输出:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Smith
                    [1] => 3
                )

            [1] => Array
                (
                    [0] => NotSmith
                    [1] => 20
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => Smith
                    [1] => 3
                )

            [1] => Array
                (
                    [0] => NotSmith
                    [1] => 20
                )

        )

)

请参阅:https://secure.php.net/manual/en/function.preg-match.php