2014-08-27 234 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