Возврат части совпадения регулярного выражения - PullRequest
1 голос
/ 18 февраля 2009

Этот вопрос показывает мое незнание регулярных выражений. Я никогда не понимал этого достаточно.

Если бы я хотел сопоставить, например, только часть URL-адреса тега в HTML, что мне нужно было бы сделать?

Мое регулярное выражение для получения всего тега:

<A[^>]*?HREF\s*=\s*[""']?([^'"" >]+?)[ '""]?>

Я понятия не имею, что мне нужно сделать, чтобы получить URL-адрес, и я понятия не имею, где искать документацию по регулярным выражениям, чтобы это выяснить.

Ответы [ 4 ]

3 голосов
/ 18 февраля 2009

При программировании на Perl вы можете использовать оператор $ 1 в операторе if (). Например,

if( $HREF =~ /<A[^>]*?HREF\s*=\s*[""']?([^'"" >]+?)[ '""]?>/ ) {
 print $1;
}
2 голосов
/ 18 февраля 2009

часть HOW зависит от используемой вами библиотеки регулярных выражений, но способ заключается в использовании сгруппированного выражения. На самом деле у вас уже есть один в вашем примере, так как сгруппированные выражения заключены в скобки. Значение атрибута href - это ваша первая группа (ваша нулевая группа - это целое выражение.)

1 голос
/ 18 февраля 2009

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

0 голосов
/ 18 февраля 2009

Я немного поменял вещи - попробуйте что-то вроде этого:

<a[^>]*href="([^"]*).*>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...