在字符串正则表达式中获取完整的值

时间:2017-07-27 06:49:04

标签: php regex

我有这样的字符串

$data = ":lol :D :| :( :cool :shy :) :P :h :search :'( :cry :think :y :@ :xd :punch :* :angle :sick :flower"

你可以看到字符串值与空格分开

$requested = ":lo";
 if (preg_match_all("/$requested/", $data, $matches)) { ?>

            <p><?php print_r($matches); ?></p>
<?php }

我希望正则表达式返回完整的值直到空间 我的意思是如果$请求值为:lo它返回:lol 我该怎么办谢谢你

2 个答案:

答案 0 :(得分:0)

您可以将$data = ":lol :D :| :( :cool :shy :) :P :h :search :'( :cry :think :y :@ :xd :punch :* :angle :sick :flower"; $requested = ":lo"; if (preg_match_all("~" . preg_quote($requested, "~") . "\S*~", $data, $matches)) { print_r($matches[0]); } // => :lol 模式与正则表达式匹配0个或更多非空白符号(贪婪,尽可能多,因为{{1}}是一个贪婪的量词):{/ p>

{{1}}

请参阅PHP demo

答案 1 :(得分:0)

您应该使用\S*。这将搜索:lo加上任何数量的非空白字符。

$data = ":lol :D :| :( :cool :shy :) :P :h :search :'( :cry :think :y :@ :xd :punch :* :angle :sick :flower";
$requested = ":lo";
if (preg_match_all("/($requested)\S*/", $data, $matches)) { ?>
            <p><?php print_r($matches); ?></p>
<?php }

请注意,如果$requested包含各种特殊字符(/\()[].*+等),正则表达式可能会中断。您可以使用preg_quote()来解决此问题。

$requested = ":lo"
$requested = preg_quote($requested, '/');