За последние 24 часа нас посетил 17631 программист и 1321 робот. Сейчас ищут 1068 программистов ...

обход двоиных вложений тойже конструкции

Тема в разделе "Регулярные выражения", создана пользователем vencendor, 9 янв 2010.

  1. vencendor

    vencendor Активный пользователь

    С нами с:
    9 дек 2009
    Сообщения:
    11
    Симпатии:
    0
    Имеется конструкция вида [a]xyxxyxy нужно усовершенствовать регулярное выражение
    "\[a\](.+)\[b\]" чтобы оно не срабатывало если $1 ( содержание внутри скобок) содержит последовательность "[a]", отдельно символы \[,\],a можно а вот при последовательности чтобы не срабатывало все выражение.
    Думаю есть простой выход из этой проблемы.
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    оно и так не сработает тк [a-z]
     
  3. vencendor

    vencendor Активный пользователь

    С нами с:
    9 дек 2009
    Сообщения:
    11
    Симпатии:
    0
    Да понимаю. Я там просто не дописал. Меня интересует сам принцип, реальная задача намного сложнее чем указанная.
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    давай реальную
    если нужно выбрать все [a][/b] без вложений
    Код (Text):
    1. #\[a\]((?:.(?!\[a\]))+)\[\/b\]#i
     
  5. vencendor

    vencendor Активный пользователь

    С нами с:
    9 дек 2009
    Сообщения:
    11
    Симпатии:
    0
    Огромное спасибо дело сдвинулось с места. жаль что не до конца понимаю смысл конструкций
    (?: ) - это вроде как () только без запоминания в списке. и почему ставится "." (?:.) ?
    (?! ) - это вроде как "справа от этой конструкции не должно быть равно". только я пробовал ее она не работала а в комплекте с (?:) заработала.

    Если можете добавить пару объяснений.
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    это собственно любой символ (match any character except newline (by default))
     
  7. vencendor

    vencendor Активный пользователь

    С нами с:
    9 дек 2009
    Сообщения:
    11
    Симпатии:
    0
    :):) Спасибо.