Ответы:
Если вы хотите, чтобы точка или другие символы со специальным значением в регулярных выражениях были нормальным символом, вы должны экранировать их обратной косой чертой. Поскольку регулярные выражения в Java являются обычными строками Java, вам необходимо экранировать саму обратную косую черту, поэтому вам нужно две обратные косые черты, например\\.
Решения, предложенные другими участниками, не работают для меня.
Но я нашел это:
чтобы избежать точки в Java регулярное выражение записи [.]
\\.
у меня не сработало: \.
жаловался, что .
не нужно убегать, \\.
заставлял думать, что это \.
вместо того .
, \\\.
и строитель сгенерировал ошибку, [.]
было единственным, что сработало.
\\.
внутри строкового литерала вы \.
получаете то, что нужно регулярному выражению, чтобы увидеть точку как буквальную точку вместо сопоставления с любым символом.
Регулярные выражения в стиле Perl (на которых более или менее основан механизм регулярных выражений Java) обрабатывают следующие символы как специальные символы:
.^$|*+?()[{\
имеют особое значение вне классов персонажей,
]^-\
имеют особое значение внутри классов символов ( [...]
).
Таким образом, вам нужно избегать этих (и только тех) символов в зависимости от контекста (или, в случае классов символов, размещать их в положениях, где они не могут быть неверно истолкованы).
Излишне экранирование других символов может работать, но некоторые движки регулярных выражений будут воспринимать это как синтаксические ошибки, например \_
, приведет к ошибке в .NET.
Некоторые другие приведут к ложным результатам, например \<
, интерпретируется как литерал <
в Perl, но в egrep
нем означает «границу слова».
Поэтому пишите -?\d+\.\d+\$
для соответствия 1.50$
и -2.00$
т. Д. И [(){}[\]]
для класса символов, который соответствует всем видам скобок / скобок / скобок.
Если вам нужно преобразовать строку ввода пользователя в форму, безопасную для регулярных выражений, используйте java.util.regex.Pattern.quote
.
Дальнейшее чтение: блог Яна Гойварта RegexGuru об экранировании метасимволов
Избегайте специальных символов с обратной косой чертой. \.
, \*
, \+
, \\d
, И так далее. Если вы не уверены, вы можете избежать любого не алфавитного символа, является ли он специальным или нет. См. Javadoc для java.util.regex.Pattern для получения дополнительной информации.
Вот код, который вы можете напрямую скопировать вставить:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
А что, если по ошибке остаются пробелы до или после "." в таких случаях? Всегда лучше учесть и эти пробелы.
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Здесь \\ s * здесь, чтобы рассмотреть пробелы и дать вам только необходимые разделенные строки.
Я хотел сопоставить строку, которая заканчивается на ". *" Для этого мне пришлось использовать следующее:
"^.*\\.\\*$"
Какая глупость, если вы думаете об этом: D Вот что это значит. В начале строки может быть любой символ ноль или более раз, за которым следует точка "." сопровождаемый звездой (*) в конце последовательности.
Надеюсь, это кому-нибудь пригодится. Спасибо за обратную косую черту Фабиану.
"\\.\\*$"
тогда. Не нужно совпадать с началом строки, если это не имеет значения для вас.
Если вы хотите закончить, проверьте, заканчивается ли ваше предложение ". ", Тогда вам нужно добавить [\. \ ] $ В конец вашего шаблона.