Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....

 

Помогите с регулярным выражением

Автор beyond, 14-04-2014, 17:21:17

« назад - далее »

beyondTopic starter

<li>
<a href="mail.ru" class="bbb">
</li>
<li>
<a href="yandex.ru" class="bbb">
</li>
<li>
<a href="google.com" class="bbb">
</li>
<li>
<a href="site.ru" class="bbb">
</li>

Нужно найти то, что выделено жирным.
ставлю шаблон рег. выражения:
(?<=<li>)[\n\rA-Za-z\<\>\=\"\ \.\/]*?google.com.*?(?=class="bbb")


а программа находит мне:
<a href="mail.ru" class="bbb">
</li>
<li>
<a href="yandex.ru" class="bbb">
</li>
<li>
<a href="google.com"

т.е. берет не минимальный вариант.
Как решить проблему?
можно ли задать в [\n\rA-Za-z\<\>\=\"\ \.\/]*?
конструкцию, чтобы не встречалось <li> ???
Как это прописывается? [^(<li>)] - не работает
  •  


Sevab

Зависит на каком языке вы программируете, т.к. реализация регулярных выражений может слегка отличаться в разных языках. Да и в одном языке могут использоваться разные интерпретации.

Для PHP preg сработает следующее выражение:

$pattern = '/<li>\s*?(<a\s+href\s*?=\s*?"google\.com")\s+class="bbb">/i';

Или можно полный код:


$str = '<li>
<a href="mail.ru" class="bbb">
</li>
<li>
<a href="yandex.ru" class="bbb">
</li>
<li>
<a href="google.com" class="bbb">
</li>
<li>
<a href="site.ru" class="bbb">
</li>
';

$pattern = '/<li>\s*?(<a\s+href\s*?=\s*?"google\.com")\s+class="bbb">/i';

if (preg_match($pattern, $str, $matches)) {
    echo $matches[1];
}



Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....