Что такое регулярное выражение для управляющих символов? - PullRequest
5 голосов
/ 04 февраля 2011

Я пытаюсь сопоставить управляющий символ в форме \ ^ c, где c - любой действительный символ для управляющих символов. У меня есть это регулярное выражение, но в настоящее время оно не работает: \\[^][@-z]

Я думаю, что проблема заключается в том, что символ каретки (^) является частью механизма синтаксического анализа регулярных выражений.

Ответы [ 2 ]

7 голосов
/ 04 февраля 2011

Соответствует текстовой строке ASCII вида ^X, используя шаблон \^., не более того. Сопоставьте текстовую строку ASCII вида \^X с шаблоном \\\^.. Вы можете ограничить эту точку до [?@_\[\]^\\], поэтому \\\^[A-Z?@_\[\]^\\]. Легче читать как [?\x40-\x5F] для класса символов в скобках, следовательно, \\\^[?\x40-\x5F] для литерала BACKSLASH, за которым следует литерал CIRCUMFLEX, за которым следует что-то, что превращается в один из допустимых управляющих символов.

Обратите внимание, что это результат распечатки шаблона или того, что вы прочитали из файла. Это то, что вам нужно передать компилятору regex. Если у вас есть строковый литерал, вы, конечно, должны удвоить каждый из этих обратных слешей. `\\\\\\^[?\\x40-\\x5F]" Да, это выглядит безумно, но это потому, что Java не поддерживает регулярные выражения напрямую, как это делают Groovy и Scala - или Perl и Ruby. Работа с регулярными выражениями всегда проще без дополнительной bbaacckksslllllaasshheesssssess. :)

Если бы у вас были реальные управляющие символы вместо их косвенного представления, вы бы использовали \pC для всех буквенных кодовых точек со свойством GC = Other или \p{Cc} для просто GC = Control.

2 голосов
/ 04 февраля 2011

Проверьте это: http://www.regular -expressions.info / characters.html .Вы должны быть в состоянии использовать \ cA to \ cZ, чтобы найти управляющие символы ..

...