2013-09-12 2 views
1

У меня возникли проблемы с получением правильного синтаксиса для моего java-регулярного выражения ниже. Я просто хотел бы найти String, чтобы увидеть, содержит ли он кусок текста, который начинается с трех одинарных кавычек и заканчивается тремя одинарными кавычками, но может иметь другой текст спереди и сзади. Любой символ UTF-8 может существовать между тремя одинарными кавычками. Любые идеи, в которых я ошибся?regex для соответствия на трех ведущих и конечных одинарных кавычках

  String value="'''<html><head><title>Hello World</title></head><body><div>text</div></body></html>'''"; 
      Pattern p = Pattern.compile("'''[\\w*]'''"); 
      Matcher m = p.matcher(value); 
      if(m.find()){ 
       System.out.println("''' found"); 
      }else{ 
       System.out.println("''' not found"); 
      } 

ответ

3

Любые идеи, где я пошло не так?

Есть 2 вещи неправильно с регулярным выражением:

  1. Вы пытаетесь поместить * квантор в классе символов в то время как он должен быть помещен снаружи.
  2. Вы пытаетесь использовать предопределенный класс символов символа символа (\ w) для сопоставления символов, таких как <,>,/хотя он будет соответствовать только [a-zA-Z_0-9]. Если вы хотите, чтобы соответствовать любому символу использовать . (любой символ)

Изменение регулярного выражения Pattern p = Pattern.compile("'''.*'''"); должен сделать код, предоставленный в вашем вопросе работать.

Шаблоны, предложенные в других ответах, также будут служить решением.

1

Try с этим регулярным выражением:

Pattern p = Pattern.compile("'{3}.*'{3}$"); 
3

Использование:

Pattern p = Pattern.compile(".*'{3}.*'{3}$"); 

.* обозначает любой символ, несколько раз (по желанию)

'{3} Обозначает 3 одиночные кавычки

.* обозначает любой символ, несколько раз (по желанию)

'{3} Обозначает 3 одинарные

$ обозначает конец строки

+0

Ведущий^не нужен. В примере строка начинается с трех кавычек, но это не указано в вопросе: «содержит три одинарные кавычки и заканчивается тремя одинарными кавычками» – rmuller

+0

@rmuller, так что технически первые 3 одинарные кавычки были бы необязательными, так как строка понадобилась бы чтобы содержать три одинарные кавычки в конце –

+0

@KevinBowersox - строка может иметь другой текст до и после трех одинарных кавычек. – c12

1

Я подозреваю, что вы хотите захватить данные String между одинарными кавычками. В этом случае вы используете неправильные круглые скобки (вы используете [] вместо ()). Кроме того, я думаю, вы хотите использовать \w*, чтобы разрешить все возможные материалы. Тем не менее, \w означает «символы слова», который обычно покрывает только [A-Za-z0-9_], а это значит, что он не обложка ваших персонажей html.

Для уточнения: сокращенный класс символов, таких как \w должен не появляться внутри из [] скобок. \w* - это то же самое, что и [A-Za-z0-9_]*, что также показывает, что ваш квантор asterisk (*) приходит после класс персонажа, а не внутри него.

Полезной формой вашего регулярного выражения будет Pattern.compile("'''(\\w*)'''");. Однако это не охватывает html-символы, такие как <.

Попробуйте использовать Pattern.compile("'''(.*)'''");, так как . означает «все символы».

Используя круглые скобки (в этом случае они образуют группу захвата), вы можете получить доступ к строке, сопоставляемой этой группой, с помощью m.group(1) после вашего звонка до m.find().

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