Java regex для проверки наличия шаблона

81
7

Я пытаюсь найти, существует ли шаблон в строке.

Я хочу проверить шаблон:

Строка, начинающаяся с пробела или "#", затем с определенной строкой "значение1", за которой следует пробел или табуляция, затем "значение2" и снова пробел или табуляция заканчивается "значением3",


Вот пример строки для проверки:

String str = "#  value1   values2 value3";

Я пробовал с регулярным выражением, но он не работал:

str.matches("^\\s+#\\s+value1\\s+value2\\s+value3");

Вышеприведенный шаблон всегда возвращает false. Пожалуйста, помогите с регулярным выражением. Любая помощь будет действительно оценена.

спросил(а) 2012-10-25T19:04:00+04:00 8 лет назад
1
Решение
91

Попробуй это: -

str.matches("^[ #]value1\\s+value2\\s+value3$");

[ #] - соответствует пробелу или #

\\s+ - соответствует 1 или более пробелам. Таким образом, это будет соответствовать пробелу или вкладке

ПРИМЕЧАНИЕ. - У вас есть values2 вместо value2 в вашей строке.

Кроме того, ваша строка примера, которую вы отправили, имеет как space и # в начале. Но вы сказали, что строка начинается с space или #. Таким образом, он будет соответствовать вашей строке, если вы удалите это пространство после первого # или вашего # перед вашим пространством, которое соответствует тому, что вы написали.

Если вы хотите, чтобы соответствовать space и # в начальной части строки, как в вашей текущей String вы вывесили. Вы должны использовать это регулярное выражение: -

str.matches("^[ #]\\svalue1\\s+value2\\s+value3$");

ответил(а) 2012-10-25T19:06:00+04:00 8 лет назад
58

Ну, я могу сказать вам прямо сейчас, что это регулярное выражение WILL не подходит для этого ввода, потому что для него требуется пробел перед #

пытаться

str.matches("^#?\\s+value1\\s+value2\\s+value3$");

что регулярное выражение должно соответствовать "# value1 value2 value3" или " value1 value2 value3" с переменными количествами пробелов

ответил(а) 2012-10-25T19:07:00+04:00 8 лет назад
41

Попробуйте это регулярное выражение (\s+|\s?#\s?).*value1.*(\s+|\t).*value2.*(\s+|\t).*value3.* Он работает, даже если у вас есть пробелы где угодно.

ответил(а) 2015-02-13T12:38:00+03:00 5 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема