Метод String split () не дает правильного результата [duplicate]

Как ни странно, ни один из этих ответов не создает регулярное выражение, где возвращаемое совпадение является текстом внутри кавычек, что и требуется. MA-Madden пытается, но получает только внутренний матч как захваченную группу, а не весь матч. Один из способов сделать это:

(?<=(["']\b))(?:(?=(\\?))\2.)*?(?=\1)

Примеры для этого можно увидеть в этом демо https://regex101.com/r/Hbj8aP/1

Ключевым моментом здесь является положительный lookbehind в начале (?<=) и положительный результат в конце (?=). Lookbehind смотрит за текущим персонажем, чтобы проверить цитату, если она будет найдена, тогда начните оттуда, а затем lookahead проверит символ впереди для цитаты и, если будет найден, остановится на этом символе. Группа lookbehind (["']) заключена в скобки, чтобы создать группу для какой-либо цитаты, найденной в начале, затем она используется в конце lookahead (?=\1), чтобы убедиться, что она останавливается только тогда, когда находит соответствующую цитату.

Единственное другое осложнение состоит в том, что, поскольку lookahead на самом деле не потребляет конечную цитату, он будет снова найден с помощью начального lookbehind, который вызывает соответствие текста между конечными и стартовыми кавычками в одной и той же строке. Помещение границы слова на открытии цитаты (["']\b) помогает с этим, хотя в идеале я бы хотел пройти мимо взгляда, но я не думаю, что это возможно. Бит, позволяющий экранированным символам посередине, я взял непосредственно из ответа Адама.

0
задан dasamit7 24 February 2015 в 18:28
поделиться