模式首先不匹配" cos"

时间:2015-04-02 15:57:44

标签: regex

/(?![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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

使用(?![a-z]),您会引入一个负向前瞻性正则表达式,意思是:

  

匹配的部分,以小写符号开头。所以不可能匹配第一个cos。

它与下一个 cos匹配,因为它也会捕获空间(满足负前瞻)。

您可能需要的是字障碍\b):

/\b(cos|sin|tan|ln)(\s|\(|\\left)/

demo

\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|)