Мета-символ Java RegEx (.) И обычная точка?

В Java RegEx, как узнать разницу между . (точка) метасимвола и нормальной точки, как мы используем в любом предложении. Как справиться с такой ситуацией для других метасимволов тоже как (*, +, /d,...)

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