На самом деле это возможно с осторожностью. Вместо:
href="(.*)">
Вы хотите
(?<=href=").*(?=">)
Теперь это будет соответствовать (и, следовательно, охватывать группу 0) любому .*
, которому предшествует href="
, а затем ">
. Обратите внимание, что я очень подозреваю, что вам действительно нужно .*?
вместо этого, то есть вместо того, чтобы жадничать.
---A--Z---A--Z----
^^^^^^^^^^^
A.*Z
В любом случае, похоже, что PHP preg
является PCRE, поэтому он должен поддерживать обходные пути.
регулярные ссылки-info.info
- Lookaround
- Сравнение вкусов
- Функции PHP
preg
реализуют разновидность PCRE.
- PCRE:
(?=regex)
(положительный взгляд): ДА
(?<=text)
(положительный взгляд сзади): исправлено + чередование
Демонстрация
<?php
$haystack = '<a href="/foo.php">Go To Foo</a><a href="/bar.php">Go To Bar</a>';
$needle = '/(?<=href=").*?(?=">)/';
preg_match_all($needle,$haystack,$matches);
print_r($matches);
?>
Запуск этого на ideone.com производит:
Array
(
[0] => Array
(
[0] => /foo.php
[1] => /bar.php
)
)
Смежные вопросы
В основном это Java, но часть регулярного выражения охватывает использование обходных путей / утверждений: