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