2010-11-22 6 views
0

У меня есть сложное регулярное выражение, которое я хочу применить. Вот мой рисунок:Как я могу избежать этой строки правильно?

/(?:^|\s|[\.(\+\-\,])(?:\$?)\$((?:[0-9]+(?=[a-z])|(?![0-9\.\:\_\-]))(?:[a-z0-9]|[\_\.\-\:](?![\.\_\.\-\:]))*[a-z0-9]+)/i 

Как я могу объявить это как строку и убедиться, что все экранировано?

+1

Шаг первый: упростите шаблон, избавившись от ненужных обратных косых черт и групп: `/(?:^|[\s.(+,-])\$?\$((?:[0-9]+ (? = [AZ]) | (?! [0-9.:_-]))(?:[a-z0-9]|[.:_-](?![.:_-])) * [a-z0-9] +)/i` – Gumbo 2010-11-22 18:06:58

ответ

2

Он смотрит на меня, как будто есть много ненужных вещей, в том, что регулярное выражение

  1. Нечто подобное (?:\$?) такого же, как только \$?
  2. Там нет необходимости «защитить» «„ „_“,“,» или „+“ символы в квадратных скобках группы

Так что вы на самом деле могли бы это:

/(?:^|\s|[.(+\-,])\$?\$((?:[0-9]+(?=[a-z])|(?![0-9.:_\-]))(?:[a-z0-9]|[_.\-:](?![._\-:]))*[a-z0-9]+)/i 

Что касается сдачи его в строку, все, что вам действительно нужно беспокоиться о вот обратные косые. Их нужно удвоить («\»). Внешние символы «/» будут отброшены, а конечный модификатор «i» будет передан в метод Pattern.compile().

0

Если вы пытаетесь протестировать этот шаблон, я предлагаю вам использовать инструмент регулярного выражения, например gskinner. Он позволяет вводить шаблон, строку и выделяет совпадения.

2

До тех пор, пока достаточно статического решения будет достаточно, и если вы используете Eclipse IDE, вы можете выбрать правильное экранирование строки при вставке из буфера обмена.

Настройки -> Java -> Редактор -> Typing -> [х] Бегство текст при вставке ...

Смежные вопросы