正则表达式:即使在正则表达式测试器中确认,也没有结果

时间:2019-03-16 12:45:32

标签: regex arduino

我想将HDMI与字符串>*sour=?#*SOUR=HDMI#隔离开来(HDMI有所不同,并且长度可以不同)。我想出了这个正则表达式来做到这一点:(?<=SOUR=)[^#]*。使用this在线正则表达式测试器,我确认这实际上是有效的。

enter image description here

在我的Arduino代码中,我正在使用Nick Gammon's RegExp library。我遵循了Nick的documentation,此代码可以正常运行并找到两个匹配项,就像在他的示例中一样。但是,当我插入上面的TargetMatch参数时,Match方法不返回任何匹配项(即执行了Serial.println("no match"))。有什么建议吗?

这是我的代码:

#include <Regexp.h>

void setup ()
{
  Serial.begin(115200);
  MatchState ms;
  ms.Target (">*sour=?#*SOUR=HDMI#");

  char result = ms.Match ("(?<=SOUR=)[^#]*");
  if (result == REGEXP_MATCHED)
  {
    char buf [100]  
    Serial.print ("Captures: ");
    Serial.println (ms.level);

    for (int j = 0; j < ms.level; j++)
      {
      Serial.print ("Capture number: ");
      Serial.println (j, DEC);
      Serial.print ("Text: '");
      Serial.print (ms.GetCapture (buf, j));
      Serial.println ("'");
      }
  }
  else if (result == REGEXP_NOMATCH)
  {
    Serial.println("no match");
  }
}

void loop () {}

1 个答案:

答案 0 :(得分:1)

您使用的库不支持后向。

您可以使用捕获小组来解决问题:

 char result = ms.Match ("SOUR=([^#]*)");