我有一个Web应用程序,允许用户指定规则以从一串文本中提取值。规则通过HTML表单输入并保存到数据库。
正则表达式:(?< =(\ bRATE:\ b))[A-Z] {3}
我使用http://gskinner.com/RegExr/ 测试了一个表达式(很棒的工具!)
然而,在我的申请中评估它时会有所不同。
如果字符串“ RATE:USD75.00 ”,正则表达式应该做的是提取3个字母的货币代码“ USD ”。
然而..... 在我的网络应用中,它会返回“ RAT ”
似乎忽略了背后积极面貌的“< ”部分。
我是否需要逃避这个角色?
有没有人遇到过类似的问题?
答案 0 :(得分:1)
为什么在lookbehind表达式中使用额外的括号?
它们不是必需的,并且可能是错误结果的可能原因,因为括号定义了捕获组,尽管在lookbehind表达式中不能从字符串中捕获任何内容。可能是使用的正则表达式引擎在此场景中失败,并在lookbehind表达式中捕获括号。
另外,第二个\b
对于字符串" RATE:"的正向后视检查是无用的。因此,3个字母的货币代码必须始终位于空格字符之后,当然这是一个字边界。
因此我建议(现在很晚)使用(?<=\bRATE: )[A-Z]{3}
,我想使用的正则表达式引擎会按预期返回3个字母的货币代码。