/(?![a-z])(\s|\d|)(cos|sin|tan|ln)(\s|\(|\\left)/
该模式与此字符串中的第一个“cos”不匹配:
cos azertcos sin(tan xxx cos cos\left tan
见: https://regex101.com/r/mB4uZ5/2
有什么想法吗?
答案 0 :(得分:4)
使用(?![a-z])
,您会引入一个负向前瞻性正则表达式,意思是:
匹配的部分,不以小写符号开头。所以不可能匹配第一个cos。
它与下一个 cos
匹配,因为它也会捕获空间(满足负前瞻)。
您可能需要的是字障碍(\b
):
/\b(cos|sin|tan|ln)(\s|\(|\\left)/
\b
与任何非单词(\W
匹配但未捕获)或字符串的开头(^
)匹配。如果你想允许数字放在前面(比如4cos(2)
),你可以使用:
/\b(\d*)(cos|sin|tan|ln)(\s|\(|\\left)/
答案 1 :(得分:1)
由于a-z
,您的正则表达式期望匹配的第一个字符为非(?![a-z])
,并且由于(\s|\d|)
而成为空格或数字。因此,如果添加前导空格,则字符串将起作用:
cos azertcos sin(tan xxx cos cos\left tan
或者你可以摆脱(?![a-z])(\s|\d|)