регулярное выражение, с "условием"

iceman

говнокодер
регулярное выражение, с "условием"

Здравствуйте,

вот есть текст... в нем может быть ссылка обычна

например:
xxx xxxxxxxx xxxxxxxxxxx xxx xxxx http://xxx.xx/xxx.x?xx=xxxx xxxxx xxxx xxx xxxxxxxx


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

[[http://xxx.xx]] то ее трогать ненадо...

как составить рег. выражение такое? или есть другие способы?
подскажите...

-~{}~ 29.10.07 11:28:

у меня есть такая идея,

все bb-коды вырезать (вернее заменить на чтонибюудь нейтральное)... и пропарсировать все урл..

патом обратно вставить bb коды

но мне кажется это слишком както сложно... но я пребываю эту идию, может у кого есть еще идеи?
 

iceman

говнокодер
(?<!foo)bar не найдёт вхождения "bar", которым не предшествует "foo".
вот эту фразу не могу понять...

-~{}~ 29.10.07 12:29:

во, кажется разобрался...


если есть у кого еще идеи, то пожалуйста постите их...

ктото же писал полюбому парсировщики bb-кодов
 

Андрейка

Senior pomidor developer
iceman
чем тебе эта идея не нравится, если ты разобрался? тебе нужен парсировщик бб-кодов? так и проси.. их есть у нас много в оффтопике
 

das6745

Новичок
ну я писал на регекспах =) простой только, списки, ссылки, картинки, i, b, и вроде того...а, ну и цвет еще =)

я так понял тебе проще сделать возможность экранирования спецюсимволов, к примеру если \[ или \] то не парсим, и все встречающиеся \[ и \] перегонять в коды, вроде как 91и 93 соответственно, но это я по памяти, коды могут быть и другими.

зы: у меня по крайней мере так работает...или что-то в этом роде
 

iceman

говнокодер
мне не нужен код, мне нужные идеи реализации

не обязательно в рег выражениях...

и все ваши ошибки, которые вы допускали, чтобы учесть я их учел...

das6745

зачем экранировать, если их всеравно придется патом разбирать...
 

das6745

Новичок
я как делал, создал массив паттернов, и соответствующий им список замены (обратно - аналогично), где одним из соответствие есть замена \[ и \] на &#91; &#93 cоответственно (коды проверь, но вроде так). этот паттерн у меня т стоит первым в массиве. Также положением в массиве паттерна я контролирую вложеность одних тагов в другие, но, имхо, это настолько кривая реализация шо мне стыдно признавать что я такое писал... зато быстро написал, да и вроде как работает =).

я еще находи парсер ббкодов нв перле, красивая реализация, ну и хбб - это мой бох =) самая оригинальная идея и самая потрясная реализация. мне понравилось =), поищи по форуму. но для моих скромных нужд мне и своего на рекэкспах хватает.

вот, еще предварительно я перегоняю спецюсимволы в сущности (htmlspecialchar), но, имхо, это просто сахар.
 

WP

^_^
Тут три варианта.
1. (?<!\[)(http:/[^\s\]]+)(?!\])
Плохо тем что lookbehind должен иметь фиксированную длину а всякие извращения плохо скажутся на скорости.
2. (\[?)(http://[^\s\]]+)(\]?) и потом проверять определены ли карманы 1 и 3.
Имеет право на жизнь.
3. \[.*?\]|(http://[^\s\]]+) и затем проверять определен ли карман 1.
Самое простое выражение из трех.
 
Сверху