В Java при выполнении replaceAll поиск шаблона регулярного выражения, например:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(чтобы удалить повторяющиеся последовательные слова без учета регистра, например, Test test), я не уверен, куда я положил ?i
. Я прочитал, что он должен быть в начале, но если я вытащу его, я поймаю повторяющиеся последовательные слова (например, тестовый тест), но не слова без учета регистра (например, тестовый тест). Поэтому я подумал, что могу добавить? I в начале, но, похоже, это не помогает. Есть предположения? Спасибо!
java
regex
case-sensitive
Кристалл
источник
источник
Ответы:
RegexBuddy сообщает мне, если вы хотите включить его в начало, это правильный синтаксис:
источник
Вы также можете сопоставлять нечувствительные к регистру регулярные выражения и сделать их более читабельными с помощью константы Pattern.CASE_INSENSITIVE, например:
источник
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
штука, регулярные выражения Java уже были совершенно нечитаемы: SДа, нечувствительность к регистру может быть включена и отключена по желанию в регулярном выражении Java.
Похоже, вам нужно что-то вроде этого:
Обратите внимание, что встроенный
Pattern.CASE_INSENSITIVE
флаг -(?i)
нет\?i
. Также обратите внимание, что из выкройки\b
удален один лишний .(?i)
Помещаются в начале шаблона , чтобы позволить прецедентную нечувствительность. В этом конкретном случае он не переопределяется позже в шаблоне, поэтому в действительности весь шаблон нечувствителен к регистру.Стоит отметить, что фактически вы можете ограничить нечувствительность к регистру только частями всего шаблона. Таким образом, вопрос о том, куда его поместить, действительно зависит от спецификации (хотя для этой конкретной задачи это не имеет значения, поскольку
\w
регистр не учитывается.Чтобы продемонстрировать, вот аналогичный пример сворачивания серий букв like
"AaAaaA"
to just"A"
.Теперь предположим, что мы указываем, что запуск должен быть свернут, только если он начинается с заглавной буквы. Затем мы должны поместить
(?i)
в соответствующее место:В общем, вы можете включать и отключать любой флаг в шаблоне по своему желанию.
Смотрите также
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
в Java) вы можете сделать/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
между a\w
и a всегда есть a\s
)Связанные вопросы
источник
Если все ваше выражение нечувствительно к регистру, вы можете просто указать
CASE_INSENSITIVE
флаг:источник
Вы также можете перевести исходную строку, которую вы собираетесь проверить на соответствие шаблону, в нижний регистр. И используйте в своем шаблоне символы нижнего регистра соответственно.
источник