我正在使用Ibm Watson助手来获得易于理解的结构。其中之一是检索两个单词之间的字符串。
句子就像;
application song name çalar mısın?
也
application'x song name çalar mısın?
并且我想在这句话中得到“歌曲名称”。歌曲名称可以是任何名称。
正则表达式在此页面上工作正常:regexr.com/4ltp1
"PLAY_SONG": "<? input.text.getMatch('(?=(?!application)\\s).+(?=\\s+çal)',0) ?>"
[当我尝试执行该命令时,出现错误,如下所示。
[使用对话框节点ID [handler_3_1569393700920]的上下文更新上下文时出错。对话框节点上下文为[{“ category”:“ action”,“ PLAY_SONG”:“”}}]。 RegEx模式语法错误:解析正则表达式时出错:无效或不受支持的Perl语法:(?=
在这种情况下正确的方法是什么?
您正在使用不支持lookbehinds的正则表达式引擎。
在这里,您可以通过使用嵌套的超前行除去正向后行并依靠capturing group来解决问题:
"PLAY_SONG": "<? input.text.getMatch('application[^ ]* +(.*) çal', 1) ?>"
记住1
参数,该参数告诉getMatch
返回用括号括起来的正则表达式部分捕获的匹配部分。
请参见regex demo
详细
application
-文字子字符串[^ ]*
-0+个空格以外的字符(.*)
-捕获组1:尽可能多0个字符]+
-0+空格çal
-文字子字符串。