В Java RegEx, как узнать разницу между .
(точка) метасимвола и нормальной точки, как мы используем в любом предложении. Как справиться с такой ситуацией для других метасимволов тоже как (*
, +
, /d
,...)
Мета-символ Java RegEx (.) И обычная точка?
Ответ 1
Если вы хотите, чтобы точка или другие символы со специальным значением в регулярных выражениях были нормальным символом, вам нужно избежать ее с помощью обратного слэша. Так как регулярные выражения на Java являются нормальными строками Java, вам нужно избегать обратной косой черты, поэтому вам нужны две обратные косые черты, например. \\.
Ответ 2
Регулярные выражения в стиле Perl (в которых механизм регулярного выражения Java более или менее основан на) обрабатывают следующие символы как специальные символы:
.^$|*+?()[{\
имеют особое значение вне классов символов,
]^-\
имеют особое значение внутри классов символов ([...]
).
Таким образом, вам нужно избежать этих (и только тех) символов в зависимости от контекста (или, в случае классов символов, поместить их в позиции, где они не могут быть неверно истолкованы).
Неправильное экранирование других символов может работать, но некоторые механизмы регулярных выражений будут рассматривать это как ошибки синтаксиса, например \_
приведет к ошибке в .NET.
Некоторые другие приведут к ложным результатам, например, \<
интерпретируется как литерал <
в Perl, но в egrep
это означает "граница слова".
Так напишите -?\d+\.\d+\$
, чтобы соответствовать 1.50$
, -2.00$
и т.д. и [(){}[\]]
для символьного класса, который соответствует всем типам скобок/скобок/круглых скобок.
Если вам нужно преобразовать строку ввода пользователя в безопасную форму, используйте java.util.regex.Pattern.quote
.
Дальнейшие чтения: Jan Goyvaert блог RegexGuru по экранированию метасимволов
Ответ 3
Решения, предлагаемые другими членами, не работают для меня.
Но я нашел это:
чтобы избежать точки в java regexp write [.]
Ответ 4
Сбросить специальные символы с обратной косой чертой. \.
, \*
, \+
, \\d
и т.д. Если вы не уверены, вы можете избежать любого не алфавитного символа, независимо от того, является оно особенным или нет. Подробнее см. javadoc для java.util.regex.Pattern.
Ответ 5
Я хотел сопоставить строку, которая заканчивается на.. * Для этого мне пришлось использовать следующее:
"^.*\\.\\*$"
Приятно, если вы думаете об этом: D Вот что это значит. В начале строки может быть любой символ, равный нулю или больше раз, за которым следует точка ".". за которым следует звезда (*) в конце строки.
Надеюсь, это кому-то поможет. Спасибо за обратную косую вещь Фабиану.
Ответ 6
Вот код, который вы можете скопировать вручную:
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 * следует рассматривать пробелы и давать вам только требуемые разделенные строки.