Чтобы сделать любой шаблон, который соответствует всей строке, необязательным, т. Е. Разрешить шаблону соответствовать пустой строке, используйте необязательную группу :
^(pattern)?$
^^ ^^^
См. Демоверсию regex
Если механизм регулярных выражений разрешает (как в Java), предпочитает группу без захвата, так как ее основное назначение - группировать только подшаблоны, а не сохранять захваченные подзначения:
^(?:pattern)?$
^
будет соответствовать началу строки (или \A
может использоваться во многих вариантах для этого), $
будет соответствовать концу строки (или \z
может использоваться, чтобы соответствовать заканчиваются во многих вариантах, и Java тоже), и (....)?
будет соответствовать 1 или 0 (из-за квантификатора ?
) последовательностей подшаблонов в скобках.
Примечание по использованию Java: при использовании в matches()
начальный ^
и конечный $
могут быть опущены, и вы можете использовать
String pattern = "(?:\d+)?";