Регулярки на пхп

J
На сайте с 08.06.2006
Offline
844
#11
Kpd:
\s+? - это клиника.

в смысле

это значит "может быть один или несколько пробелов, а может не быть вообще"

или ошибаюсь?

Kpd, подскажите как решить проблему?

J
На сайте с 02.02.2009
Offline
53
#12

<a.*href\s*=\s*['\"]?(?!http:\/\/)(.*)['\"]?\s*>

Так попробуйте

тока она с target = _blank будет глючить

UPD:

Хм, можно так


<a.*?href\s*=\s*(['\"]?)(?!http:\/\/(?!(www\.)?oursite\.com))([^\s]+)\1.*?>

или


<a.*?href\s*=\s*(['\"]?)(?!http:\/\/(?!(www\.)?oursite\.com))(http:\/\/(www\.)?oursite.com)?([^\s]+)\1.*?>

на


<a href=page.php>
<a title=page href=page.php>
<a href = page.php>
<a href="page.php">
<a href='page.php'>
<a href=http://site.com/page.php>
<a href=http://www.site.com/page.php>
<a href=http://site.com/page.php target=_blank>
<a href=/page.php target=_blank>
<a href=http://oursite.com/page.php>
<a href=http://www.oursite.com/page.php>
K
На сайте с 12.07.2006
Offline
295
Kpd
#13

joost, RTFM

joost:
это значит "может быть один или несколько пробелов, а может не быть вообще"

Это делается так - \s*

J
На сайте с 08.06.2006
Offline
844
#14
jumash:
\s*

что значить? "может есть пробел,а может нет" ?

jumash:
(?!http:\/\/)

равно

joost:
(?:http:\/\/)?

как называется финт с использованием ?! в скобках ? ?: - называется "не учет групировки для preg_ функций"

J
На сайте с 02.02.2009
Offline
53
#15

да, от 0 и больше

?! - отрицание в забегании

[Удален]
#16

я бы сделал так

preg_match_all('#<a [^>]*?href\s*=\s*(\S+?)[>\s]#ism',$hmtl,$links);

полученные рещультаты просто бы отфильтровал на кавычки и был счастлив тому, что я гений в очередной раз.

J
На сайте с 08.06.2006
Offline
844
#17
jumash:
\s*>

заменил на

\s|>
работает с target = _blank

joost добавил 23.07.2009 в 19:01

jumash:
?! - отрицание в забегании

где почитать доступно об этом можно?

J
На сайте с 02.02.2009
Offline
53
#18
bearman:
я бы сделал так

preg_match_all('#<a [^>]*?href\s*=\s*(\S+?)[>\s]#ism',$hmtl,$links);

полученные рещультаты просто бы отфильтровал на кавычки и был счастлив тому, что я гений в очередной раз.

Не обольщайся. Внутренние ссылки - это не только те, что с / начинаются.

Ну и кстати конструкция <a [^>]*?href бессмысленна) Модификатор жадности и так не дойдёт до >

joost, http://www.pcre.ru/docs/php/text/stdsyntax/ - раздел Утверждения и дальше

Насчёт target=_blank - дальше две регулярки ещё которые цепляют внутренние ссылки нормально - включая ссылки с http://свойдомен

[Удален]
#19

jumash, извини, но я думал что ссылки все хотите, ибо ТС не сильно читал

Array
(
[0] => Array
(
[0] => <a href=page.php>
[1] => <a title=page href=page.php>
[2] => <a href = page.php>
[3] => <a href="page.php">
[4] => <a href='page.php'>
[5] => <a href=http://site.com/page.php>

[6] => <a href=http://www.site.com/page.php>
[7] => <a href=http://site.com/page.php
[8] => <a href=/page.php
[9] => <a href=http://oursite.com/page.php>
[10] => <a href=http://www.oursite.com/page.php>
)

[1] => Array
(
[0] => page.php
[1] => page.php
[2] => page.php
[3] => "page.php"
[4] => 'page.php'
[5] => http://site.com/page.php
[6] => http://www.site.com/page.php
[7] => http://site.com/page.php
[8] => /page.php
[9] => http://oursite.com/page.php
[10] => http://www.oursite.com/page.php
)

)


<?
$txt = "<a href=page.php>
<a title=page href=page.php>
<a href = page.php>
<a href=\"page.php\">
<a href='page.php'>
<a href=http://site.com/page.php>
<a href=http://www.site.com/page.php>
<a href=http://site.com/page.php target=_blank>
<a href=/page.php target=_blank>
<a href=http://oursite.com/page.php>
<a href=http://www.oursite.com/page.php>";

preg_match_all('#<a [^>]*?href\s*=\s*(\S+?)[>\s]#ism',$txt,$links);

print_r($links);

не веришь, попробуй сам.

я уже полинтернета спарсил и почти любые регулярки пишу без проверки ;)

bearman добавил 23.07.2009 в 22:31

ну а проверить по условиям на внуттр ссылки - легко потом. поверьте, такая регулярка + foreach самый простой метод реализации.

ewg777
На сайте с 04.06.2007
Offline
225
#20
почти любые регулярки пишу без проверки

Мы и так знаем, что ты аццкий.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий