Показать сообщение отдельно
  #1 (permalink)  
Старый 18.10.2009, 02:42
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Регулярные выражения в парсере
Сколько ни читаю, а одолеть суть не могу... Регулярные выражения - самая сложная область у Perl, PHP и JS.

Простой пример:
Типичное форумское
[URL=location title="Hint"]Address[/URL]

Как здесь нужно описать регулярое выражение, чтобы выловить и тэг URL, и location, и Hint, и Address?
А то замучался писать сам алгоритмы с разбором строк.

Или вот интерпретатор языка.
Например:
•var_2 = '• Example #1'• Commentary #2
••var_1 = "var_2 = \"• Don't cry...\" + 'Why?';" + var_2• Commentary #1 ••
Здесь мой алгоритм работает так:
Если в начале строки идёт ряд из "•", он их подсчитывает. До первого любого символа.
Затем эти "•" не должны попадаться вне строк ('...' или "..."), иначе они указывают на обрыв выражения и начало комментария.

Мой скрипт с этим справляется, но содержит много строк и довольно сложен в отладке. Одно введение новой конструкции - снова перестаёт работать и требует длительной отладки.

Могут ли и тут помочь регулярки? Чтобы легко получить три аргумента:
#1: Количество "•" вначале строки;
#2: Само выражение до конца строки или до символа "•", если он не заключём в '...' или в "...";
#3: Строка, отделённая от основного выражения символом "•". Содержит что угодно как комментарий.

Приведённые выше строки должны преобразоваться:
из
•var_2 = '• Example #1'• Commentary #2
в
#1: 1
#2: var_2 = '• Example #1'
#3: • Commentary #2
и из
••var_1 = "var_2 = \"• Don't cry...\" + 'Why?';" + var_2• Commentary #1 ••
в
#1: 2
#2: var_1 = "var_2 = \"• Don't cry...\" + 'Why?';" + var_2
#3: • Commentary #1 ••

Большое спасибо!

Последний раз редактировалось Paguo-86PK, 18.10.2009 в 03:00.
Ответить с цитированием