2014-08-27 297 views
0

說我有以下字符串,$ mytext的內容:PHP如何找到字符串後匹配/通配符/匹配

[QUOTE=FirstUserRANDOMNUMBER]First user's post[/QUOTE] 

Great post, FirstUser 

[QUOTE=SecondUserRANDOMNUMBER]Second user's post[/QUOTE] 

Awful post. I didn't like it. 

得到一個用戶名,我怎麼能找到引用用戶下面的文字? (忽略RANDOMNUMBER)

我希望能夠將「SecondUser」輸入到函數中並讓它返回:「可怕的帖子,我不喜歡它。」

基本上,我只是想引用用戶的迴應。

我想我會做基於$ mytext的一個SUBSTR如下:

strpos($username, $mytext) + strlen("[QUOTE=$username") + strlen("[/QUOTE]") 

但我不知道怎麼去通配符文本的長度[QUOTE = $的用戶名和之間[/ quote]的下一個實例

這必須支持在$ mytext中出現多個引號,就像上面的例子。

謝謝!

回答

1

您可以使用正則表達式是這樣的:

\[QUOTE=SecondUser.*\[\/QUOTE\]([^[]*) 

Working demo

enter image description here

+0

謝謝!這似乎並沒有與preg_match一起工作: 'preg_match('\ [QUOTE = SecondUser。* \ n] [/ QUOTE] [$ QUOTE = SecondUserRANDOMNUMBER]第二個用戶的帖子[/ QUOTE] [\/QUOTE \]([^ [] *)',$ mytext,$ matches);' 'echo $ matches [0];'不返回任何東西。 – 2014-08-27 21:46:22

+0

@PFBilling它適用於regex101 http://regex101.com/r/yS1cR0/2。順便說一句,你可以檢查代碼生成器部分複製內容。 – 2014-08-27 21:50:17

+0

這必須是我的PHP代碼的問題。非常感謝正則表達式 - 標記爲Accepted,因爲正則表達式正是我們所需要的。 – 2014-08-27 21:51:48

1

的搜索,但不捕獲((...)組內),要排除一切。在這種情況下,\[Quote.*。然後搜索(並捕獲)您想要保留的所有內容。它將被保存在\1參考:

^\[QUOTE.*\n+|(^.*$) 

它將比賽[QUOTE...]線,但它並沒有捕獲該行:即保持唯一的線

Great post, FirstUser 
Awful post. I didn't like it. 

Example