Как написать строку с несколькими регулярными выражениями? - PullRequest
1 голос
/ 26 октября 2019

Я пытаюсь написать строку регулярного выражения, которая выполняет следующее:

Строковая переменная, которая может содержать только:

  • Буквы от a до z (верхний и нижний регистр) (ноль или много раз)
  • Символ дефиса (ноль или много раз)
  • Символ одинарных кавычек (ноль или один раз)
  • Символ пробела (ноль илиодин раз)

Попытка поиска по многим веб-сайтам регулярных выражений

.matches("([a-zA-Z_0-9']*(\\s)?)(-)?"))

Это позволяет приблизиться к тому, что я хочу, однако вы не можете начать печатать az больше после ввода пробела. Так что это последовательно в некотором смысле. Я хочу, чтобы валидация учитывала любую последовательность этих факторов.

Ожидается:
Разрешено вводить строку с любым количеством a-zA-Z, от нуля до одного пробела, от нуля до одного тире,в любом месте строки.

Ответы [ 2 ]

2 голосов
/ 26 октября 2019

Это подтверждение для этого

"^(?!.*\\s.*\\s)(?!.*'.*')[a-zA-Z'\\s-]*$"

Расширенное

 ^                      # Begin
 (?! .* \s .* \s )      # Max single whitespace
 (?! .* ' .* ' )        # Max single, single quote
 [a-zA-Z'\s-]*          # Optional a-z, A-Z, ', whitespace or - characters
 $                      # End
0 голосов
/ 26 октября 2019

Полагаю,

^(?!.*([ ']).*\\1)[A-Za-z' -]*$

может работать нормально.


Здесь,

(?!.*([ ']).*\\1)

мы пытаемся сказать, что если бы была горизонтальнаяпробел (\ h) или одинарная кавычка (') дважды в строке, исключите те, которые мы будем хранить только с нулями или одним повторением.

Тест

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "^(?!.*([ ']).*\\1)[A-Za-z' -]*$";
        final String string = "abcAbc- ";

        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
            for (int i = 1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + ": " + matcher.group(i));
            }
        }

    }
}

Вывод

Full match: abcAbc- 
Group 1: null

Если вы хотите упростить / изменить / изучить выражение, это объясняется в верхней правой панели regex101.com . Если хотите, вы можете также посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

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