Регулярное выражение: начните со второго - PullRequest
0 голосов
/ 08 января 2010

Я хочу найти второй тег <BR> и начать поиск оттуда. Как я могу сделать это с помощью регулярных выражений?

<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>

alt text

alt text

Ответы [ 4 ]

1 голос
/ 08 января 2010

Добавьте <BR>[^<]*(?=<BR>) к своему регулярному выражению или удалите вспомогательную часть, если вы хотите начать после второй <BR>, например: <BR>[^<]*<BR>.

Найти текст после второго <BR>, но до третьего: <BR>[^<]*<BR>([^<]*)<BR>

Это находит "Уолдо" в <BR>404<BR>waldo<BR>.

Примечание: Я специально использовал вышеупомянутое вместо нежадного .*?, потому что, как только вышеприведенное начинает работать для вас, вы должны прекратить синтаксический анализ HTML с помощью регулярного выражения , и .*? будет скрываться, когда это произойдет. Однако не жадный квантификатор также не так хорошо поддерживается, и вы всегда можете изменить его, если хотите.

0 голосов
/ 08 января 2010

это регулярное выражение должно вычислять первые два <br /> s:

/(\s*<br\s*/?>\s*){2}/i

, поэтому вы должны либо заменить их ничем, либо использовать preg_match или RegExp.prototype.match для извлечения аргументов.

В JavaScript:

var afterReplace = str.replace( /(\s*<br\s*\/?>\s*){2}/i, '' );

В PHP

$afterReplace = preg_replace( '/(\s*<br\s*\/?>\s*){2}/i', '', $str );

Я только уверен, что он будет работать в PHP / JavaScript, но он должен работать во всем ...

0 голосов
/ 08 января 2010

при условии, что вы используете PHP, вы можете разбить вашу строку на <BR>, используя explode

$str='<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>';
$s = explode("<BR>",$str,3);
$string = end($s);
print $string;

выход

$  php test.php
Abdurrahman<BR><SMALL>Fathers Name</SMALL>

затем вы можете использовать переменную "$ string" и делать все, что захотите.

Шаги, описанные выше, можно выполнить и с другими языками, используя методы разделения строк, которые есть в вашем языке прог.

0 голосов
/ 08 января 2010

Обычным решением проблемы такого рода является использование «группы захвата».Большинство систем регулярных выражений позволяют вам извлекать не только всю совпадающую последовательность, но и суб-совпадения в ней.Это делается путем группировки части выражения в ( и ).Например, если я использую следующее выражение (это в JavaScript; я не уверен, на каком языке вы хотите работать, но основная идея работает в большинстве языков):

var string = "<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>";
var match = string.match(/<BR>.*?<BR>([a-zA-Z]*)/);

Тогда яможно получить либо все, что соответствует, используя match[0], то есть "<BR>like <BR>Abdurrahman", либо я могу получить только часть в скобках, используя match[1], что дает мне "Abdurrahman".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...