选择Text After Pattern

时间:2009-10-27 17:59:07

标签: php regex

我正在尝试按照特定模式选择中间的所有文本:

示例文字:

"by thatonekid (Posted Mon Jan 12, 2009 7:17 pm)
fell onto the trail right below one of the most traveled walls at the point! yikes!

"

我处理的每个文字都将以:“USERNAME(已发布日期)<br /> theTextIWant”

开头

我想过对paren的爆炸,但很明显,如果有另一个人,那可能会破坏文本。

其次,一些文本以“<br /><br />”结尾。如果之后没有文字,我需要删除尾随的<br />

如果我要求有人做我的作业,我道歉 - 老实说我不知道​​从哪里开始

2 个答案:

答案 0 :(得分:3)

如果您只需要用户名/日期之后的文字,则可以在第一个&lt; br /&gt;之前删除所有内容,假设您的格式是一致的。

$text = preg_replace("/^.*?<br(\s\/)?>/si", "", $string);

这将取代之前的所有内容,包括第一个&lt; br&gt;或者&lt; br /&gt;,不区分大小写,带有空字符串,只留下文本。 。*?在开始时是一个非贪婪的比赛,这意味着它将尽可能少地捕捉。换句话说,它不会超过第一次休息。

然后您可以按照以下方式执行此操作:

$text = preg_replace("/^.*?<br(?:\s\/)?>(.*?)(<br(\s\/)?>)+$/si", "$1", $string);

这应该删除所有结束的空格和&lt; br&gt; /&lt; br /&gt;标签

你也可以用一个preg_replace来完成所有这些:

$text = preg_replace("/.*?<br(?:\s\/)?>(.*)(?:<br(?:\s\/)?>\s*)+$/si", "$1", $string);

我做了所有()捕获(?:)非捕获,但包含文本的捕获除外。

(我不经常使用php,所以我假设perl兼容的正则表达式就是它所说的。)

答案 1 :(得分:0)

例如,您可以尝试使用preg_match进行正则表达式。见在线文档。

username : [_a-zA-Z09]+
date: [0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4}

(抱歉gtg,如果未解决,请稍后帮助你)