Я пытаюсь сопоставить строки, которые не имеют расширений .jsp / .jspx в Java, и у меня много трудностей с шаблоном отрицательного просмотра вперед.
Учитывая кучу строк:
String string1 = "templateName";
String string2 = "some/path"
String string3 = "basic/filename/no/extension"
String string4 = "some/path/to/file.jsp"
String string5 = "alternative/path/to/file.jspx"
Я пытаюсь найти регулярное выражение, которое соответствует первым 3, а не последним 2.
Я бы подумал, что регулярное выражение с отрицательным взглядом вперед будет работать.
Ex:
Pattern p = new Pattern.compile( "(.+)(?!\\.jsp[x]?)")
Но этот шаблон, похоже, соответствует всем приведенным выше строкам. Сначала я подумал, что группа 1 может быть слишком жадной, поэтому попробовал (. +?), Но это тоже не помогает.
В этом сообщении SO очень хорошо объясняется отрицательный прогноз, но он, к сожалению, не помогает мне найти правильную комбинацию. .
Я упускаю что-то очевидное?
some/path/to/file.jsp
, потому что он может соответствоватьs
,so
или чему-то еще, если он не включает последнюю косую черту. См. Ответы анубхавы. Во втором случае используется отрицательный просмотр вперед для сбоя, если за началом строки следует непустая последовательность символов, за которой следует.jsp[x]
(если.jsp[x]
находится в конце строки). - person ajb   schedule 28.10.2013