israel_rider
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Cherry, огромное спасибо за Ваши замечания, надо же… не учёл. Цитата: а если кавычки одинарные? | Честно говоря, само выражение писал не я, пусть уж это останется на совести писавшего. Допустим, почему после [\"\'] Стоит ?? . Ну второй знак вопроса понятно – лечит от жадности. А первый? При помощи [\"\']?? мы хотим определить кавычки, обрамляющие URL в атрибуте href ссылки HTML. Но кавычки должны быть обязательно, href без кавычек – это очень старый стандарт, и не встречается уже ни где вообще. А квантификатор ? обозначает ноль или один. Далее, при помощи [^\">] мы хотим исключить символы, которые запрещены в атрибуте href . Но таких символов может быть несколько, не одни только кавычки. Уж проще перечислить символы, которые имею право там быть. И почему после группы [^\">] квантификатор – звёздочка? Звёздочка – это ноль или сколько угодно. Но URL не может состоять из нуля символов, следовательно там должен быть квантификатор – плюс. Цитата: а если в адресе идет сразу '/?page=2' ? | Вообще то, этого быть не может, поскольку регулярное выражение изменено мною с одной специфической целью – что бы продукт нашей фирмы поддерживал следующую фичу - Styling Page-Links http://codex.wordpress.org/Styling_Page-Links . Но, тогда, просто из любви к искусству, переписал: <?php header('Content-Type: text/plain'); $pattern ='/<a\s[^>]*href\s*=\s*([\"\']??)([^\">]*?([\?&]page=\d+?)[^\">]*?|[^\" >]*?)\\1[^>]*>(.*)<\/a>/siU'; $subject = '<a href=\'http://test.domain.kvet/blogtest3/?page=20&p=31\'>2</a>'; preg_match($pattern, $subject, $matches); print_r($matches); $subject = '<a href=\'http://test.domain.kvet/blogtest3/?p=31\'>2</a>'; preg_match($pattern, $subject, $matches); print_r($matches); Цитата: а если там 2 и более цифры? | С учётом Вашего замечания, вот окончательный результат – <?php header('Content-Type: text/plain'); $pattern ='/<a\s[^>]*href\s*=\s*([\"\']??)([^\">]*?(&page=\d+?)|[^\" >]*?)\\1[^>]*>(.*)<\/a>/siU'; $subject = '<a href="http://test.domain.kvet/blogtest3/?p=31&page=20">2</a>'; preg_match($pattern, $subject, $matches); print_r($matches); $subject = '<a href="http://test.domain.kvet/blogtest3/?p=31">2</a>'; preg_match($pattern, $subject, $matches); print_r($matches); |