2017-10-09 198 views
-5

我嘗試了很多組合來創建正確的正則表達式,但我失敗了。如何創建正確的RegEx?

我想讀此,輸入:

[@Homer Jay Simpson](id:homer) is a good guy. 

,並得到

Array (
    [0] => "[@Homer Jay Simpson](id:homer)", 
    [1] => "Homer Jay Simpson", 
    [2] => "homer" 
) 

的感謝!

+0

我不確定@rika正則表達式是一個不錯的選擇更好地嘗試使用括號來爆炸字符串 – shashi

回答

2

擺弄了一點點後,這個正則表達式會爲你工作:

\[@([^\]]+)\]\(id:([^)]+)\) 

使用,如:

$str = "[@Homer Jay Simpson](id:homer) is a good guy."; 
preg_match('#\[@([^\]]+)\]\(id:([^)]+)\)#', $str, $matches); 
print_r($matches); 

產地:

Array 
(
    [0] => [@Homer Jay Simpson](id:homer) 
    [1] => Homer Jay Simpson 
    [2] => homer 
) 

小費時創建正則表達式模式,從小處開始構建到它的末端。我開始只匹配方括號\[@([^\]]+)\]的內部,然後拼湊在其餘的部分。完整的日誌here

0

http://www.phpliveregex.com/p/lAg

preg_match("/\[\@(.*?)\]\(id:(.*?)\)/", $str, $matches); 
Var_dump($matches); 

這將捕獲括號[]()之間是什麼。
\使reges讀取符號爲文字。
.*?表示懶惰捕捉任何東西,如果有任何長度。