Метасимвол Java RegEx (.) И обычная точка? - PullRequest
134 голосов
/ 09 сентября 2010

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

Ответы [ 8 ]

253 голосов
/ 09 сентября 2010

Если вы хотите, чтобы точка или другие символы со специальным значением в регулярных выражениях были нормальным символом, вы должны экранировать их обратной косой чертой.Поскольку регулярные выражения в Java являются обычными строками Java, вам необходимо экранировать саму обратную косую черту, поэтому вам нужно две обратные косые черты, например \\.

18 голосов
/ 28 августа 2015

Решения, предложенные другими участниками, не работают для меня.

Но я нашел это:

для выхода из точки в java regexp write [.]

16 голосов
/ 09 сентября 2010

Регулярные выражения в стиле Perl (на которых более или менее основан механизм регулярных выражений Java) обрабатывают следующие символы как специальные символы:

.^$|*+?()[{\ имеют специальное значение вне классов символов,

]^-\ имеют специальное значение внутри классов символов ([...]).

Таким образом, вам нужно избегать этих (и только тех) символов в зависимости от контекста (или, в случае классов символов, размещать их в положениях, где их нельзя неправильно интерпретировать).

Может оказаться ненужным экранирование других символов, но некоторые движки регулярных выражений будут воспринимать это как синтаксические ошибки, например, \_ приведет к ошибке в .NET.

Некоторые другие приведут к ложным результатам, например, \< интерпретируется как литерал < в Perl, но в egrep это означает «границу слова».

Поэтому напишите -?\d+\.\d+\$, чтобы соответствовать 1.50$, -2.00$ и т. Д. И [(){}[\]] для класса символов, который соответствует всем видам скобок / скобок / скобок.

Если вам нужно преобразовать строку ввода пользователя в форму, безопасную для регулярных выражений, используйте java.util.regex.Pattern.quote.

Дальнейшее чтение: Блог Яна Гойварта RegexGuru по экранированию метасимволов

4 голосов
/ 09 сентября 2010

Побег специальных символов с обратной косой чертой.\., \*, \+, \\d и т. Д.Если вы не уверены, вы можете избежать любого не алфавитного символа, является ли он специальным или нет.См. javadoc для java.util.regex.Pattern для получения дополнительной информации.

1 голос
/ 06 июня 2017

Вот код, который вы можете напрямую скопировать вставить:

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

1 голос
/ 21 августа 2015

Я хотел найти строку, которая заканчивается на ". *" Для этого мне пришлось использовать следующее:

"^.*\\.\\*$"

Какая глупость, если вы думаете об этом: D Вот что это значит. В начале строки может быть любой символ ноль или более раз, за ​​которым следует точка "." за которым следует звезда (*) в конце строки.

Надеюсь, это кому-нибудь пригодится. Спасибо за обратную косую черту Фабиану.

0 голосов
/ 07 июля 2018

Я делаю некоторый базовый массив в JGrasp и обнаружил, что с помощью метода доступа для массива char [] [] используется ('.') Для размещения одной точки.

0 голосов
/ 25 мая 2018

Если вы хотите закончить, проверьте, заканчивается ли ваше предложение ". ", тогда вы должны добавить [\. \ ] $ в конец вашего паттерна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...