Я пытаюсь найти что-то и для жизни, я не могу понять, почему это не работает, как ожидалось.Почему шаблон не может соответствовать «/ *!»?
Строка: "/*! preserved */"
Выкройка:
Pattern.compile("(/[*][!](?:.+?)[*]/)", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
- FAIL
Выкройка:
Pattern.compile("(/[*](?:.+?)[*]/)", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
- PASS
Я только хочу, чтобы поймать комментарии, которые имеют !
сразу после открытия комментария строки. Я даже попытался сокращениями спички к только /*!
:
Pattern.compile("(/[*][!])", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
- FAIL
Pattern.compile("(/[*!]{2})", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
- FAIL
Pattern.compile("(/[*][!])", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
- FAIL
Java Version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
EDIT
Это терпит неудачу, который не имеет смысла для меня, так как моя модель не имеет начала или конца с требованием:
Pattern p = Pattern.compile("(/[*]!.+?[*]/)", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("this is a test /*! preserved */ this is a test /*! preserved1 */");
System.out.println("Pattern: " + p);
System.out.println("Group: " + m.group(1));
System.out.println("Found: " + m.find());
Даже сведя его просто соответствовать /*!
терпит неудачу:
Pattern p = Pattern.compile("(/[*]!)", Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("this is a test /*! preserved */ this is a test /*! preserved1 */");
System.out.println("Match: " + m.find());
System.out.println("Pattern: " + p);
System.out.println("Group: " + m.group(1));
'*' - специальный символ, убегающий так: '\\ *' – Doorknob
@Doorknob, ставящий '*' в '[]', как он сделал, делает его совпадающим с литералом '*'. – Kevin