我正在尝试按照特定模式选择中间的所有文本:
示例文字:
"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 />
。
如果我要求有人做我的作业,我道歉 - 老实说我不知道从哪里开始
答案 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,如果未解决,请稍后帮助你)