PHP использует довольно близкую версию к PCRE (PERL Regex).Если вы хотите узнать много нового о регулярных выражениях, посетите perlretut.org .Кроме того, посмотрите на генераторы Regex как exspresso.
Для вашего использования знайте, что регулярное выражение является жадным.Это означает, что когда вы указываете, что вы хотите что-то, после чего-то (любые повторения), а затем что-то, оно будет продолжаться, пока эта секунда не будет достигнута.:
<a href="
- любой символ, любое количество раз (регулярное выражение =. *)
">
- любой символ,любое количество раз (regex =. *)
</a>
после этого вы хотите захватить вторую группу «любой символ, любое количество раз».Вы можете сделать это, используя так называемые группы захвата (захватывайте что-либо внутри скобок как группу для последующего использования, также называемую обратные ссылки ).
Я бы также посмотрел на именованные подшаблоны , тоже - с ними вы можете ссылаться на ваш выбор с помощью удобочитаемой строки, а не индекса массива.Синтаксис для тех, кто в PHP: (?P<name>pattern)
, где name - это имя, которое вы хотите, а pattern - фактическое регулярное выражение.Я буду использовать это ниже.
Итак, все, что говорится, вот "ленивая паутина" для вашего регулярного выражения:
<?php
$str = '<h3><b>File</b> : <a href="/en/browse/file/variable_text">i_want_this</a></h3>';
$regex = '/(<a href\=".*">)(?P<target>.*)(<\/a>)/';
preg_match($regex, $str, $matches);
print $matches['target'];
?>
//This should output "i_want_this"
О, и одна заключительная мысль.В зависимости от того, что именно вы делаете, вы можете захотеть изучить SimpleXML вместо того, чтобы использовать для этого регулярное выражение.Вероятно, для этого потребуется, чтобы теги, которые мы видим, были просто фрагментами большого целого, поскольку SimpleXML требует правильно сформированного XML (или XHTML).