Это как избежать всех метасимволов регулярных выражений.
Фон:
Если вам нужно преобразовать некоторый входной или динамический источник в регулярное выражение, то оно гарантировано
что это 100% литерал.
\Q .. \E
используется, если у вас есть MIX литералов регулярных выражений и литералов, которые используют конструкции регулярных выражений через метасимволы.
Пример: (?:\Q(?:dogs|cats)*\E)+
Это будет соответствовать одному или нескольким буквам (?:dogs|cats)*
Есть и другие проблемы с \Q .. \E
, такие как вложение и интерпретация
конечный результат избежал регулярного выражения. Это становится очень трудно отлаживать.
Итак, самое простое и безопасное - просто использовать String.replaceAll()
.
Пример Java:
String src = "he,<>!!llo \\ + * ? [ ] ( ) { } | . ^ $ wo-r@l#d";
System.out.println( src );
src = src.replaceAll("([\\\\+*?\\[\\](){}|.^$])", "\\\\$1");
System.out.println( src );
Выход:
he,<>!!llo \ + * ? [ ] ( ) { } | . ^ $ wo-r@l#d
he,<>!!llo \\ \+ \* \? \[ \] \( \) \{ \} \| \. \^ \$ wo-r@l#d