积极看待网络应用程序中的差异背后

时间:2013-11-19 12:45:22

标签: asp.net .net regex regex-lookarounds

我有一个Web应用程序,允许用户指定规则以从一串文本中提取值。规则通过HTML表单输入并保存到数据库。

正则表达式:(?< =(\ bRATE:\ b))[A-Z] {3}

我使用http://gskinner.com/RegExr/ 测试了一个表达式(很棒的工具!)

然而,在我的申请中评估它时会有所不同。

如果字符串“ RATE:USD75.00 ”,正则表达式应该做的是提取3个字母的货币代码“ USD ”。

然而..... 在我的网络应用中,它会返回“ RAT

似乎忽略了背后积极面貌的“< ”部分。

我是否需要逃避这个角色?

有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:1)

为什么在lookbehind表达式中使用额外的括号?

它们不是必需的,并且可能是错误结果的可能原因,因为括号定义了捕获组,尽管在lookbehind表达式中不能从字符串中捕获任何内容。可能是使用的正则表达式引擎在此场景中失败,并在lookbehind表达式中捕获括号。

另外,第二个\b对于字符串" RATE:"的正向后视检查是无用的。因此,3个字母的货币代码必须始终位于空格字符之后,当然这是一个字边界。

因此我建议(现在很晚)使用(?<=\bRATE: )[A-Z]{3},我想使用的正则表达式引擎会按预期返回3个字母的货币代码。