Простой RegEx PHP - PullRequest
       17

Простой RegEx PHP

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

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

<a href="/folder/files/hey/">hey.exe</a>
<a href="/folder/files/hey2/">hey2.dll</a>
<a href="/folder/files/pomp/">pomp.jpg</a>

В PHP мне нужно извлечь то, что находится между <a> тегами, например:

hey.exe
hey2.dll
pomp.jpg

Ответы [ 5 ]

6 голосов
/ 26 февраля 2009

Старайтесь не использовать '. *', Даже если вы сделаете его неприличным, пока не начнете больше практиковаться с RegEx. Я думаю, что хорошим решением для вас будет:

'/<a[^>]+>([^<]+)<\/a>/i'

Обратите внимание на разделители '/' - вы должны использовать preg набор функций регулярных выражений в PHP. Это будет выглядеть так:

preg_match_all($pattern, $string, $matches);
// matches get stored in '$matches' variable as an array
// matches in between the <a></a> tags will be in $matches[1]
print_r($matches);
2 голосов
/ 26 февраля 2009

Это похоже на работу:

$pattern = '/<a.*?>(.*?)<\/a>/';
2 голосов
/ 26 февраля 2009
2 голосов
/ 26 февраля 2009

Вот очень простой:

<a.*>(.*)</a>

Однако вы должны быть осторожны, если у вас есть несколько совпадений в одной строке, например,

<a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a>

В этом случае правильное регулярное выражение будет:

<a.*?>(.*?)</a>

Обратите внимание на '?' после квантификатора *. По умолчанию квантификаторы являются жадными, что означает, что они съедают столько символов, сколько могут (что означает, что они будут возвращать только «hey2.dll» в этом примере). Добавляя кавычки, вы делаете их непривлекательными, что должно лучше соответствовать вашим потребностям.

2 голосов
/ 26 февраля 2009

<a href="[^"]*">([^<]*)</a>

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