и такая
<a href="../Parks/Parks.asp">Check out Parks</a> в общем тексте
есть регулярка preg_match_all('/<a.*?href=["\'](.*?)["\'].*?(?:\.open\(\'(.*?)\')?.*?>(.+?)<\/a>/i',$url_open['content'],$arLinks,PREG_SET_ORDER);
проблема в том что если после (?:\.open\(\'(.*?)\') есть знак вопроса то в $arLinks пихается вот это [10] => Array
(
[0] => <a href="#" onClick="NewWin=window.open('../jumpMunis.asp','jump','scrollbars=1')">View</a>
[1] => #
[2] =>
[3] => View
)
[11] => Array
(
[0] => <a href="../ParksAndRec/ParksAndRec.asp">Check out Parks</a>
[1] => ../Parks/Parks.asp
[2] =>
[3] => Check out Parks
)
где в 10: 2 ключе должно быть ../jumpMunis.asp но оно почему-то туда не лезет хоть? значит 0 или 1 и если есть тогда добавляет в match(это не ??)
при этом если убрать знак вопроса после (?:\.open\(\'(.*?)\') то находится вот так [0] => Array
(
[0] => <a href="#" onClick="NewWin=window.open('../jumpMunis.asp','jump','scrollbars=1')">View</a>
[1] => #
[2] => ../jumpMunis.asp
[3] => View
)
при этом находятся только где есть строка open(… а ведь ее может и не быть.
Как можно решить данную проблему. Может глаза уже замылились и не видят очевидно.
Буду рад помощи.
UPD. Спасибо за минусы в карму. Видно вопрос мой не столько высокотехнологичен для юзеров хабра. Хотя это в духе Хабра.
на самом деле регулярка вообщем-то не очень то и сложная(бывало и покруче), но я согласен что возможно не сильно доступно описал это все.
Цель получить из ссылки <a href="MyLink" onClick="NewWin=window.open('../jumpMunis.asp','jump','scrollbars=1')">View
MyLink и ../jumpMunis.asp
при этом что события onClick может и не быть тогда нужно получить только MyLink.
Если есть какие-то варианты для этого в одну регулярку буду рад.
Возьму смелость ответить за автора: надо, чтобы регулярка получала из ссылки значение атрибута href, значение первого параметра (урл) window.open (если есть) и, собственно, текст ссылки
Спасибо за уточнение но уже не нужно. Все же 2 регулярки пришлось делать.
2WebSpider: ну вот, вы все правильно поняли. Жаль только что народу нужно столько усилий чтобы разобрать цель задачи. После этого наверно на решение её и не стоит надеется.
Видимо вам это уже не нужно, но вдруг пригодится — /<a[^>]*(href=["'](.*?)["'])([^>]*\.open\(["'](.*?)["'])?.*?>(.*?)<\/a>/i
Вот тут проверил www.regexplanet.com/simple/index.html, на php не проверял
["\'].*?(?:\.open\(\'(.*?)
в этой части рергулярки
нужно вот так
["\'](?:.*?\.open\(\'(.*?)
получается что сначала .*? съедает все до закрывающего тега >
а только потом уже проверяется есть ли в строке (?:onclick)?, естественно после > его уже нету.
Во всяком случае это насколько я понял. Это времени углубятся чтобы научно подтвердить этот факт.