Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Снова Regex

365
24 февраля 2005 года
MasterSID
230 / / 23.02.2003
Подскажите пожалуйста как мне в regex обозначить следующее условие: любое количество любых символов, среди которых не встречается такая последовательность: abc
4
24 февраля 2005 года
mike
3.7K / / 01.10.2002
попробуй. Не уверен что пройдет с несколькими символами

[^abc]*

так прокатывает:

[^>]*
10K
24 февраля 2005 года
beast
7 / / 24.02.2005
наверное так:
[^(abc)]*
365
24 февраля 2005 года
MasterSID
230 / / 23.02.2003
неа, не получается.
в общем мне нужно вот что:
из тега <a> выбрать href="xxx" причем чтобы первые скобки вернули все что в <a... .../a>, вторые саму ссылку, третьи текст ссылки. Причем так нужно учесть что кавыечк после = может и не быть. В любом месте тэг может прерваться переводом строки. В теле самого <a> может встречаться 0 до n количество левых пробелов и сам href может чередоваться в любой последовательности с другими параметрами.
Вот что у меня пока есть, но я не могу определить сам текст ссылки:
/(<a +?[^>]*href=\"?([^>\"]*)\"?[^>]*>(здесь идет текст ссылки)<\/a>)/
10K
24 февраля 2005 года
beast
7 / / 24.02.2005
может лучше на три выражения разделить.
что то типа этого:

<script>
function runit(str)
{
var str="<a href=http://www.ya.ru>kuku</a>"
output1=str.match(/<a([^>]+>[^<]+<)\/a>/i)[1];
output2=str.match(/<a href=['|"]?([^ >"']+)/i)[1];
output3=str.match(/<a[^>]+>([^<]+)<\/a>/i)[1];
alert
(
output1+"\n"+
output2+"\n"+
output3
)
}
</script>
<button onclick=runit()>runit</button>
4
24 февраля 2005 года
mike
3.7K / / 01.10.2002
$comment=eregi_replace("<a target=\"_blank\" href=\"([^\"]*)\">([^<]*)</a>","\\2",$comment);
365
24 февраля 2005 года
MasterSID
230 / / 23.02.2003
Цитата:
Originally posted by mike
$comment=eregi_replace("<a target=\"_blank\" href=\"([^\"]*)\">([^<]*)</a>","\\2",$comment);



Майк, тут получается, что внутри <a> не может быть других тэгов.

287
24 февраля 2005 года
Shiizoo
958 / / 14.03.2004
Код:
$| = 1;

$src = '<a title=wow href="www.codenet.ru">
ahaha<tagg>grr</tagg>
</a>';

$start = '<';
$end = '>';
$rval = qq/'[^']*?'|"[^"]*?"|[^ ]+/;
$href_tkn = '[hH][rR][eE][fF]';
$title_tkn = '[tT][iI][tT][lL][eE]';

$nest = 0; $chunk = '';

while ($src =~ s/^(.*?)(?:$start(.*?)$end)//sx) {
    $tchunk = $1; $tcon = $2;
    if ($nest == 1) {
    $chunk .= $&;
    if ($tcon =~ m,^/[aA]\s*$,s) {
          $chunk =~ s,\n,
,g;
        print "Chunk: " . $chunk . ";\t";
        $nest = 0; next;
    }
  }
  if ($nest == 0 and $tcon =~ m,^[aA],s) {
    if ($tcon =~ m,$href_tkn=($rval),s) {
            print "Href: " . $1 . ";\t";
    }
    if ($tcon =~ m,$title_tkn=($rval),s) {
            print "Title: " . $1 . ";\t";
    }
    $nest = 1;
  }
  next;
}


Типа того на perl`e. Глянь перловый tt2, там parser.pm.
365
25 февраля 2005 года
MasterSID
230 / / 23.02.2003
Сори, я в перле не очень шарю, но есть вопрос такой: как тут отлавливается сам текст ссылки, т.е. ее подпись?
365
25 февраля 2005 года
MasterSID
230 / / 23.02.2003
А самое главное - обработка самой ссылки у меня идет через callback функцию, так что сама ссылка должна получаться одной строкой regexp
365
25 февраля 2005 года
MasterSID
230 / / 23.02.2003
Решение: /(<a +?[^>]*href=\"?([^>\"]*)\"?[^>]*>(.*?)<\/a>)/si
10K
25 февраля 2005 года
beast
7 / / 24.02.2005
не забудь про такую ссылку:
kuku
287
25 февраля 2005 года
Shiizoo
958 / / 14.03.2004
Нет, ну как я понял ему нужно отловить тэг <a> с любыми аттрибутами, причем независимо порядка их расположения. Точнее отловить целевой url и содержимое <a>(ето)</a>. Если найду у себя php щас то перверстаю мой пример на php.
365
26 февраля 2005 года
MasterSID
230 / / 23.02.2003
мое решение пока выглядит так:
$p1="\"[^\"]*\"";
$p2="\'[^\']*\'";
$p3="[^ >]*";
$p_par=" +($p1|$p2|$p3) *";
$p_href=" +href=($p1|$p2|$p3) *";
/<a($p_par)*($p_href)+($p_par)*>(.*?)<\/a>/si

Может быть есть косяки? кто просечет?
Цель - да. Отловить только сам URL и текст ссылки
287
13 апреля 2005 года
Shiizoo
958 / / 14.03.2004
$str = '<a name="link1" nohref lang=ru href=\\'http://www.mail.ru\\' onlick="ja>vascript:void(0);">Ahah</a>';

$p_attr = '(?:\s+[a-zA-Z0-9_-]+(?:=(?:\\'.*?\\'|".*?"|[^ ]*))?)*';

$p = '#(.*?)#s';

/** И проверка **/

if (preg_match($p,$str,$matches)) {
for ($i = 0; $i < count($matches); $i++) {
$matches[$i] = str_replace('<','&lt;',$matches[$i]);
$matches[$i] = str_replace('>','&gt;',$matches[$i]);
}
echo "Link: $matches[1]

\n";
echo "Text: $matches[2]

\n";
foreach ($matches as $key=>$value) {
echo $key . ' ## ' . $value . "
\n";
}
}

=) запоздало, ну да неважно. авось еще кому пригодится.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог