我正在学习正则表达式并在regexpal.com上测试我的表达式。到目前为止,这个正则表达式匹配任何小于1000的数字:
^ \ d {1,3} $
例如:999匹配。
只有在向左或向右放置$符号时,才会要求我匹配表达式。我不知道该怎么做。所以我想:
通过执行此操作可以检测到右侧的美元符号。例如,999 $匹配:
^ \ d {1,3}的 \ $ $
这样做可以检测左边的美元符号。例如$ 999匹配:
^的 \ $ \ d {1,3} $
我想,使用运算符?,我可以接受左边和右边的$符号:
^的(\ $)吗 \ d {1,3}的(\ $)吗 $
这部分解决了问题,正则表达式现在匹配:
但也匹配:
如何修正我的正则表达式强制至少一个美元符号向右或向左(但不是两个)并拒绝一个没有$的数字(我们不能使用字符数9和99和999都匹配)?< / p>
答案 0 :(得分:5)
答案 1 :(得分:1)
你可以按照你第一次假设的方式进行,使美元符号可选 在两端,但添加一个最多需要1美元符号的断言 剩下的就到位了。
^(?=[^$]*\$[^$]*$)\$?(?:\d|[1-9]\d|[1-9]\d{2})\$?$
^
(?= [^$]* \$ [^$]* $ )
\$?
(?:
\d
| [1-9] \d
| [1-9] \d{2}
)
\$?
$
或者,它允许在美元金额上领先零,但是如果你想要 这样做,它的..
^(?=[^$]*\$[^$]*$)\$?\d{1,3}\$?$
更短,但允许前导零。
^
(?= [^$]* \$ [^$]* $ )
\$? \d{1,3} \$?
$