Regex: Как требовать, чтобы за определенным символом следовали только одна или несколько цифр - PullRequest
0 голосов
/ 21 января 2020

Вот мое регулярное выражение:

^[0-9\(\)\*\+\/\-\sd]*$

Это соответствует таким вещам, как: '2d6', '(3d6) + 3', et c.

Но оно также соответствует: ' 3d '

Я хочу, чтобы любая буква d всегда была , за которой следовало за 1 или более цифрами.

1 Ответ

0 голосов
/ 22 января 2020
  1. Если вы действительно хотите сопоставить некоторую произвольную строку ограниченного набора символов (например, (2511****d4+++(), но также убедитесь, что за d следует число, то вы можете разделить regex в две альтернативы (…|…):

    ^([\d\(\)\*\+\/\-\s]|d\d+)*$
      ------------------ ----
               |           |
      single characters   dN
    
  2. Но если вы хотите сопоставить более конкретный шаблон c, такой как number d number, необязательно заключенный в скобки , за которым, возможно, следует operator number, тогда вам понадобится улучшенное регулярное выражение. Например:

    ^(\d+d\d+|\( *\d+d\d+ *\))( *[\+\-\*\/] *\d+)?$
      ------- ---------------    ----------  ---
         |           |                |       |
        NdN       ( NdN )          operator   N
    
  3. С третьей стороны, если ваша строка является произвольным математическим выражением, то вам , вероятно, понадобится что-то вроде парсер рекурсивного спуска для обработки вложенных выражений.

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