【问题标题】:RegEx: Check for char at the start of string正则表达式:检查字符串开头的字符
【发布时间】:2018-11-13 12:34:07
【问题描述】:

一些信息:

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

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

输入字符串:

-(2*3)

RegEx 必须匹配使表达式为负的“-”。比如:

-(2*3) //Must Match

但不是:

2 - 3 //Must not Match

在上面的示例中,运算符作为减号工作,它不会使整个表达式变为负数。

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

我的问题

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

【问题讨论】:

  • 很难用正则表达式解析表达式

标签: regex string delphi char match


【解决方案1】:

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

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

请参阅online demo

但是,如果您只处理独立的字符串,则使用正字符类转换正向后视和使用负字符类替代负后向会更有效:

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

another regex demo。只测试一个接一个的字符串,而不是全部在多行模式下。

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

【讨论】:

    【解决方案2】:

    也许你可以试试?

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

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

    结果...

    -(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??
    

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 2013-12-21
      • 2012-08-05
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多