2009-10-27 3 views
0

Я пытаюсь выделить весь текст в промежутке между следующей конкретной схеме:Select Text После Pattern

Образец текста:

"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 (Добавлено DATE) <br /> theTextIWant "

Я думал о взрыве на параде, но, очевидно, это могло сломать текст, если есть еще один парен.

Во-вторых, некоторые тексты заканчиваются на «<br /><br />». Мне нужно удалить завершающий <br />, если после этого текста нет.

Я прошу прощения, если это выглядит как я прошу кого-то, чтобы сделать свою домашнюю работу - я честно не знаю, где начать здесь

ответ

3

Если вы хотите только текст после имени/даты, вы можете просто удалить все до первого < бр />, предполагающего форматирования согласуется.

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

Это заменит все до и включая первый < бр> или < бр />, нечувствительны к регистру, с пустой строкой, оставляя вам только текст. . *? в начале это не-жадный матч, то есть он будет захватывать как можно меньше. Другими словами, он не пройдет мимо первого перерыва.

Вы можете следить за этим с:

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

Это должно устранить все пробелы и окончание < ш>/< бр /> теги.

Вы также мог бы сделать все это с одной preg_replace:

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

Я сделал все() захваты (:) не-снимку, за исключением одного, содержащее текст?.

(Я не использую php регулярно, поэтому я предполагаю, что регулярное выражение, совместимое с perl, является тем, что оно говорит).

+0

Thanks Jeff! Первая замена возвращает пустую строку. Есть идеи? Третий возвращает следующую ошибку: Сообщение: preg_replace(): Ошибка компиляции: нераспознанный символ после (? Или (? - при смещении 8 – jmccartie

+0

Как насчет добавления захвата после первого БР, а затем просто возврата захвата? идея, как это сработает? – jmccartie

+0

@jmccartie: Я исправил проблемы в первых двух. Мне не удалось использовать модификатор 's', чтобы сказать, что он соответствует всей строке, включая несколько строк. Кроме того, я добавил^начало линейного совпадения. Что касается третьего, правильный синтаксис не-захвата (? :) not (?), поэтому я исправил это, но по какой-то причине он все еще не работает для меня. –

0

Например, вы могли бы попробовать thoses регулярное выражение, с preg_match я думаю. см. онлайн-документ.

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

(извините GTG, помогая вам более позже, если нерешенный)