在下面的示例中,我在[]
中有一系列允许用户输入的字符。在这里,我想要将一个特定的角色限制在一次。
例如,我希望用户只输入一次.
。现在,我尝试[\.]{1,1}?
,但它没有用。
"((([-]{1,1}?[0-9\\(]*\\.?[0-9\\(]+[\\+\\-\\*\\/\\)]?)*)|(?:[0-9-+*/^()x\\.?]|<<|>>|!!|&&|[\|]|~|^|abs|e\^x|ln|log|a?(?:sin|cos|tan)h?)+)"
答案 0 :(得分:0)
我假设您直接从代码中复制了正则表达式。因此,不需要双重转义字符来分析您的正则表达式。它们只在那里,因为你必须在例如字符串中的每个\
中转义它们。 Java的。首先分析以下正则表达式:
((([-]{1,1}?[0-9\(]*\.?[0-9\(]+[\+\-\*\/\)]?)*)|(?:[0-9-+*/^()x\.?]|<<|>>|!!|&&|[\|]|~|^|abs|e\^x|ln|log|a?(?:sin|cos|tan)h?)+)
在您提出的问题中,您提到要将点字符(.
)限制为仅限一个字符。现在的第一个问题是.
你的意思是什么?在正则表达式中,有2个点。
((([-]{1,1}?[0-9\(]*\.?[0-9\(]+[\+\-\*\/\)]?)*)|(?:[0-9-+*/^()x\.?]|<<|>>|!!|&&|[\|]|~|^|abs|e\^x|ln|log|a?(?:sin|cos|tan)h?)+)
↑↑↑ (1) ↑↑ (2)
您的点的第一次出现是\.?
。这意味着,如果存在点或没有点,则正则表达式匹配。 \
转义点,因为.
字符会匹配每个字符。问号?
表示前面的字符必须在0到1次之间发生。这个正则表达式也是如此:\.{0,1}
。它们彼此相同。
此处,转义点\.
是集合[0-9-+*/^()x\.?]
的一部分。这意味着,集合中的任何字符必须恰好匹配一次,因为集合后没有量词(例如+
,*
,?
,{4,12}
) 。例如,它会匹配5
,+
,^
,x
,\.
,但只会匹配一次。
现在的问题是,你想在这个正则表达式中改变什么?正则表达式已经符合您的期望。如果您的问题与此处描述的不同,则需要提供更多信息。