Требуется регулярное выражение - доллары без центов - PullRequest
3 голосов
/ 09 мая 2019

Я пытаюсь создать регулярное выражение, которое совпадает с числами после знака доллара, но потом не имеет центов.

$ 33,92 - нет совпадения

$ 211 - соответствует 211

Это то, что у меня пока есть.

(?<=\$)\d+(?!\.)

Глядя на эту строку ...

Что-то $ 122,30 $ 45 $ 1,111

... оно ПРАВИЛЬНО соответствует «45», но также соответствует «12».

Я понимаю, почему это неправильно, но я не знаю, как это исправить.

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 мая 2019

Вы можете использовать

(?<=\$)\d+(?![.\d])

См. regex demo .

Синонимные выражения, показывающие использование собственнического квантификатора и атомарной группировки:

(?<=\$)\d++(?!\.)
(?<=\$)(?>\d+)(?!\.)

Выражение для тех сред, где lookbehind не поддерживается, должно иметь группу захвата вокруг шаблона \d+:

\$(\d+)(?![.\d])
  ^   ^

Тогда необходимое значение находится в группе 1.

Итолько к вашему сведению: \$([0-9]+)($|[^.0-9]) будет работать даже с POSIX ERE.

Подробнее

  • (?<=\$) - $ должно появиться сразу слева оттекущая позиция
  • \d+ - 1+ цифр
  • (?![.\d]) - точка или цифра не должны появляться сразу справа от текущей позиции.

График регулярных выражений:

enter image description here

1 голос
/ 09 мая 2019

С PCRE двигателями (PHP и т. Д.) Вы можете использовать

\$\d+\.\d+(*SKIP)(*FAIL)|\$\d+

См. демо на regex101.com .


Сломанный это читает:
\$\d+\.\d+(*SKIP)(*FAIL) # match any $123.3323223 format
                         # and "forget" the matches
|                        # or
\$\d+                    # match your desired format
0 голосов
/ 09 мая 2019

вы можете использовать эту работу со мной (? <= \ $) \ D ++ (?!). </p>

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