2017-07-27 49 views
1

我有這樣得到完整的價值

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

你可以看到字符串值字符串是seprate與空間

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

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

我想正則表達式返回完整的可貴空間 我意思是如果$要求的值是:lo it return:lol 我該怎麼辦謝謝你

回答

0

你可能會追加\S*模式匹配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 

PHP demo

+0

不錯。謝謝 – moh

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, '/'); 
+0

值得注意的感謝 – moh