我有这样的字符串
$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 我该怎么办谢谢你
答案 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, '/');