2016-06-10 4 views
-2

Я пытаюсь создать регулярное выражение для следующего string-простой Regex вопрос

<tr> 
     <td colspan=2> 
     <p><b> 
     CITY Head: 
     <span > 
     <span >##CITY##</span> 
     <o:p></o:p> 
     </span> 
     </b> 
     </p> 
     </td> 
     <td colspan=1> 

Я хочу найти весь TD блок, имеющий городской голова в нем. Я мог бы найти следующее регулярное выражение.

<td(.*)[\s](.*)[\s]+CITY Head+(.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s]+<\/td> 

В основном я должен был написать (.*)[\s] для всех выше и ниже городских голов линий. Но это может быть разным в разных случаях.

Поэтому я ищу общий способ объединить все (.*)[\s] во что-то независимое от количества строк.

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – HRgiger

+1

Но так как bobince говорит: «Итак, продолжайте, разбирайте HTML с регулярным выражением, если нужно. Это только сломанный код, а не жизнь и смерть ». * –

+0

Да, по совету бобинса, в конце концов можно было изучить закаленные жадные жетоны. Затем, имея проблемы с производительностью, продолжайте изучать технологию цикла. И, в конце концов, просто поймите, что парсер DOM был намного проще. –

ответ

0

[\s\S]*? будет соответствовать наименьшее возможное число (* = 0 или больше, ? = ungreedy) из пробельных (\s) или непробельных (\S) (т.е. любые) символов.

<td((?!<\/?td)[\s\S])*?CITY Head[\s\S]*?<\/td> 

Утверждение (?!<\/?td) убеждается раздел перед тем CITY Head не занимать более одной ячейки таблицы.

Но с использованием регулярного выражения не является надежным способом анализа HTML. В частности, это регулярное выражение может вывести неверный результат, если HTML содержит синтаксическую ошибку.

+0

Вышеупомянутое регулярное выражение возьмет все все TD, которые идут перед «CITY Head». Регулярное выражение должно быть спроектировано таким образом, чтобы только первый ТД, прежде чем CITY Head приступил к анализу. – Invisible

+0

Правда, должен был протестировать. Я добавил отрицательное утверждение, чтобы исправить это. Вот почему я обычно отвечаю на эти вопросы: «Вы не можете анализировать HTML с регулярным выражением»;) –

+0

Perfect. Большое спасибо. :-) – Invisible

Смежные вопросы