В 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 * следует рассматривать пробелы и давать вам только требуемые разделенные строки.