/(?![a-z])(\s|\d|)(cos|sin|tan|ln)(\s|\(|\\left)/
这种模式不会在这个字符串首先匹配 “COS”:模式不匹配第一 “COS”
cos azertcos sin(tan xxx cos cos\left tan
见: https://regex101.com/r/mB4uZ5/2
任何想法?
/(?![a-z])(\s|\d|)(cos|sin|tan|ln)(\s|\(|\\left)/
这种模式不会在这个字符串首先匹配 “COS”:模式不匹配第一 “COS”
cos azertcos sin(tan xxx cos cos\left tan
见: https://regex101.com/r/mB4uZ5/2
任何想法?
随着(?![a-z])
你介绍一个负向前查找正则表达式,这意味着:
匹配的,所以如果你添加一个空格你的字符串会工作部分,可以不是以小写字母开头。所以不可能匹配第一个cos。
它匹配的下cos
因为它捕获空间以及(满足负先行)。
你可能想要的是一个字屏障(\b
):
/\b(cos|sin|tan|ln)(\s|\(|\\left)/
\b
与任何非单词匹配(\W
,但没有捕捉),或将开始字符串(^
)。如果你想允许放置位在前方以及(如4cos(2)
),你可以例如使用:(?![AZ])
/\b(\d*)(cos|sin|tan|ln)(\s|\(|\\left)/
太棒了!谢谢 – me987654323 2015-04-02 16:07:37
这就是说,如果你打算写一个数学解析器,你应该使用上下文无关文法(a * compiler-compiler *)。这将使解析方式更容易,更不容易出错。 – 2015-04-02 16:15:27
你的正则表达式期待本场比赛的第一个字符是一个非a-z
因为(?![a-z])
,并且是空白或数字,因为(\s|\d|)
。
cos azertcos sin(tan xxx cos cos\left tan
或者你可以摆脱(?![a-z])(\s|\d|)
我认为OP引入了它来获得'foocos'和其他调用的红色。 – 2015-04-02 16:04:20
我不会建议领先空间。它更像是一种黑客攻击,并且使得'(!![a-z])'是多余的。 – 2015-04-02 16:04:26
@ʰᵈˑ同意,但我不确定OP真正想做什么,所以我只是抛出选项 – 2015-04-02 16:06:02
的''在开始时防止第一“COS “从被匹配。 – Default 2015-04-02 16:00:20
'(?![a-z])是不是表示第一个字符不能是'a-z'? – 2015-04-02 16:00:57