正则表达式:检查字符串开头的字符

时间:2018-11-13 12:34:07

标签: regex string delphi char match

一些信息:

我有一个Delphi XE正则表达式:

(?<=[*+\/drt><=≥≤≠])\-

输入字符串:

-(2*3)

RegEx必须匹配使表达式为负的'-'。例如:

-(2*3) //Must Match

但不是:

2 - 3 //Must not Match

在上面的示例中,运算符为负号,不会使整个表达式为负。

我的解决方案是上面的正则表达式,它仅在运算符后匹配减号。如果减号前的char是变量,数字或其他定义的关键字,则不会匹配。

我的问题

如果减号位于字符串的开头,则正则表达式不匹配,因为即使字符使整个表达式为负,也不会在前面加上char。我如何匹配这个减号,即使它在字符串的开头并且前面没有字符?

2 个答案:

答案 0 :(得分:1)

要匹配正字符类中的字符串开头或char是

(?<=^|[*+/drt><=≥≤≠])-
    ^^

请参见online demo

但是,如果只处理独立的字符串,则将正向后的隐式字符转换为正字符类,并用负向后的字符类转换为负向后字符的替代方法更为有效:

(?<![^*+/drt><=≥≤≠])-

请参见another regex demo。仅一个接一个地测试字符串,而不是在多行模式下全部测试。

请注意,您无需在字符类外转义-。也不需要转义/字符,它也不是特殊的正则表达式元字符,并且您不需要在Delphi中将其用作正则表达式定界符。

答案 1 :(得分:0)

也许您可以尝试?

(\-\().+(\))

以“-(”,任何字符开头,后跟“)”。

结果...

-(2*3) //Must Match
2 - 3 //Must not Match
test -(2*3) //Must Match??
test -( 2*3 ) //Must Match??
test -() //Must not Match??
test -( ) //Must Match??