Вложенный просмотр вперед и назад в регулярном выражении

У меня проблемы с вложенными '+' / '-' lookahead / lookbehind в регулярном выражении.

Допустим, я хочу изменить '*' в строка с '%' и предположим, что '\' экранирует следующий символ. (Превращение регулярного выражения в sql-подобную команду ^^).

Итак, строка

  • '* test *' следует заменить на '% test%' ,
  • '\\ * test \\ *' -> '\\% test \\% ', но
  • ' \ * test \ * ' и ' \\\ * test \\\ * ' должны остаться прежними.

Я пробовал :

(?<!\\)(?=\\\\)*\*      but this doesn't work
(?<!\\)((?=\\\\)*\*)    ...
(?<!\\(?=\\\\)*)\*      ...
(?=(?<!\\)(?=\\\\)*)\*  ...

Какое правильное регулярное выражение будет соответствовать символам '*' в приведенных выше примерах?

В чем разница между (? и (? = (? или, если они по существу неверны, разница между регулярными выражениями, имеющими такую ​​визуальную конструкцию?

9
задан tchrist 29 August 2012 в 11:36
поделиться