Ну дело в том, что я знаю это и далеко не новичок в работе с регулярными выражениями Только в данном случае флаг m толи ничего не делал, толи я его не туда вставлял.
Дела пока фигово. Писал регулярку для кавычек, уже вроде полностью нормально подсвечивала супер-пупер заковыристую строку, потом я внес изменения и... какая-то ерунда началась. Еще поковырялся, пока забил, за нехваткой времени. Вообще, подумываю над тем, чтобы парсить текст посимвольно для кавычек, хередоков и комментариев. Касаемо Геши - онлайн-подсветка в десять раз увеличивает время работы скрипта, при учете, что подсвечиваемый код имеет 20 строк. Он крутой, конечно, но грузить около 300 килобайт для подсветки -) TheShock флаг S - в РНР, для JS это флаг g (global matching)
я в консольном форуме делал развернутый парсер строки. он должен был правильно делить такие вещи: Код (Text): cd "../../" && clear echo "if ($a && $b)" && ls / echo "something \\\\\\" - тут кавычка неэкранированная echo "something \\\\\\\" - тут - экранированная Ну и тому подобное. Решил я это так. 1. Выбираем экранирующий символ. В html это "&". То есть " == ", & == &. Я выбрал символ символ % 2. Заменяем все проценты на их коды - %[es] 3. Заменяем парные слешы кодом слеша - %[bs]. Таким образом все экранированные слеши отключаются 4. Заменяем экранированные двойные кавычки, обычные кавычки, пробелы. 5. Ищем все строки /(["'])(.*?)\1/ и заменяем их на экранированные сущности, например %[NX], где X - номер строки по счету. Строки заносим в массив с индексом, где индекс равен коду X. 6. После этого я смело могу делить строку по символам "&&" 7. После этого парсю каждую из них по отдельности, деля ее по пробелам и анализируя каждое отдельное слово. Конечно, в подсветке кода принцип не совсем такой, но, думаю, подтолкнет на размышления. Ну и стоит, конечно, почитать, как пишутся интерпретаторы и компиляторы. Думаю, там тоже пару идей можно найти.
Я это и имел в виду. Потому текст что надо обрабатывать иногда блоками, а находить блоки посимвольно, ну по крайней мере в серверной части, ну в JS почти также, тоесть по разному. При этом надо еще сохранять нужную тебе легковесность, что иногда не получается. Да сейчас компы мощные, но не у всех
TheShock string = ' \'\' "\'" \' \' "\'\'" /*/**/ "\\"" /* " " \'b\' */ \'abc\' " \' \\" \\" \' " \'""\' \'"\' \'"\' \'\\\'\' "\'" \'cde\'';