Означает ли использование Pattern.LITERAL то же самое, что и Pattern.quote? - PullRequest
6 голосов
/ 30 января 2011

Точнее:

Pattern.compile(s, x | Pattern.LITERAL)

и

Pattern.compile(Pattern.quote(s), x)

создать эквивалентные регулярные выражения для любой строки s и любого другого флага x?

Еслинет, как симулировать Pattern.LITERAL?

Ответы [ 3 ]

3 голосов
/ 30 января 2011

Краткий ответ: для вашего примера, да.

Длинный ответ: да, но Pattern.quote более гибок.Что делать, если вы хотели только некоторые вашего паттерна?Например:

Pattern.compile(Pattern.quote(s) + "+", x)

При установке флага Pattern.LITERAL даже символ + теперь будет обрабатываться буквально.

Если вы не доверяете документации, возможно, посмотрите исходный код в Google Code Search для Pattern.compile поможет.

Из того, что я могу извлечь из просмотра исходного кода:

  • Если флаг LITERAL установлен , а не , независимо от всех других флагов, он будет искать любые блоки в кавычках \ Q ... \ E и вручную экранировать специальные символы, как и следовало ожидать.

  • Если установлен флаг LITERAL, он преобразуетвесь шаблон с использованием метода newSlice , и существуют особые случаи как минимум для флагов CASE_INSENSITIVE и UNICODE_CASE

1 голос
/ 02 февраля 2011

Если ответить на вопрос «как есть», то ответ «нет» из-за установки x = Pattern.LITERAL, приводящего к цитированию s дважды во втором выражении. С двойными кавычками и s="A" строка "A" не будет сопоставлена, а строка "\\QA\\E" будет. Тем не менее,

Pattern.compile(s, x | Pattern.LITERAL)

кажется эквивалентным

Pattern.compile(Pattern.quote(s), x & ~Pattern.LITERAL)
0 голосов
/ 30 января 2011

Хотя я не вижу в этом проблемы, я не совсем верю в применении флагов произвольных шаблонов вместе с кавычками из целых шаблонов.В документации упоминается, что он отображает все флаги, кроме двух, в конце концов.Я думаю это было бы хорошо, но закрась меня méfiant - недоверие.

Вы пробовали использовать \Q … \E только на тех частях шаблона, которые вы хотите процитироватьв не-метасности, так сказать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...