2016-07-27 3 views
-2

У меня есть пользовательский ввод, который я пытаюсь сопоставить, но я выделяю специальные символы, такие как '^- и т. Д. Я хотел бы знать, можно ли предоставить определенный набор символов для соответствия или «игнорировать». Так что если список содержит "^-", и этот термин был PRM, P^^R---^M был бы совпадением, но PROM не было, так как O не входит в набор допустимых символов.Возможно ли соответствовать любому числу конкретных символов в течение срока?

Возможно ли это с регулярным выражением?

+0

Любил бы объяснение downvotes, счастливым перефразировать, если это нужно вопрос. – kgrad

+0

Это возможно, но неуклюже. Вам нужно будет сделать что-то вроде 'P [^ -] * R [^ -] * M'. Лучшим решением является просто удалить эти символы из вашей строки перед применением регулярного выражения. –

+0

Возможно, я могу это сделать, но мне нужно сохранить строку, регулярное выражение облегчит мне жизнь, но если это не подходит, я могу двигаться дальше. – kgrad

ответ

3

С помощью Java 8 вы можете использовать String.join для объединения отдельных символов из термина с группами символов, представляющими один или несколько ваших специальных символов, то есть что-то вроде [^-]*, но с особым символом регулярного выражения.

String term = "PRM"; 
String special = "^-"; 

String delimiter = "[" + Pattern.quote(special) + "]*"; 
String regex = String.join(delimiter, term.split("")); 

System.out.println(Pattern.matches(regex, "PROM"));  // --> false 
System.out.println(Pattern.matches(regex, "P^^R---^M")); // --> true 

В качестве альтернативы, вы можете также replaceAll специальные символы с "" и проверить равенство:

System.out.println(term.equals("PROM".replaceAll(delimiter, "")));  // --> false 
System.out.println(term.equals("P^^R---^M".replaceAll(delimiter, ""))); // --> true 
+0

, так что невозможно перечислить его глобально, я думаю, это имеет смысл. Спасибо за помощь. – kgrad

+0

Я просто имел в виду вместо того, чтобы вставлять список «спецсредств» между каждым персонажем, чтобы обеспечить его глобальным способом за один раз. Полагаю, на самом деле это не имеет значения. – kgrad

+0

@kgrad Смотрите мой второй подход, просто заменяя все эти символы ничем, а затем сравнивая. На самом деле это может быть проще. –

Смежные вопросы