【问题标题】:Regex Curly brackets not working properly正则表达式大括号无法正常工作
【发布时间】:2023-03-31 15:18:01
【问题描述】:

我有以下问题:

我正在使用 opensge Progress-4gl,版本 11.3。 我正在尝试使用正则表达式来检查输入的字符串是否根据我们的要求有效。

字符串应该正好是 6 个字符长,只有数字。所以我来到了这个正则表达式:^[0-9]{6}$. 根据在线正则表达式测试人员的说法,它应该可以工作。

现在,当我正在使用这个正则表达式时,就好像 {6} 部分被简单地忽略/删除了。

完整代码:

DEFINE VARIABLE regexp               AS CLASS System.Text.RegularExpressions.Regex NO-UNDO.
regexp = NEW System.Text.RegularExpressions.Regex("^[0-9]{6}$").
IF NOT regexp:IsMatch(objKonprest:orderref) THEN
DO:
    MESSAGE "Orderref is not valid!"
           VIEW-AS ALERT-BOX.
end.

objkonprest:orderref 可以是任何字符串,但使用上面的代码,ismatch 将始终返回 false,除非它是 1 个字符的数字。

有人遇到过这种问题吗?我可以使用以下正则表达式来解决它:^[0-9][0-9][0-9][0-9][0-9][0-9]$,但这很愚蠢。

编辑:添加真实代码

提前致谢:)

【问题讨论】:

  • 你应该发布你的真实代码和真实模式,不要删除多余的字符。
  • 修改后显示真实代码

标签: .net regex progress-4gl


【解决方案1】:

这是因为 {} 在 ABL 中具有特殊含义。只需转义 { 和 }。
修改代码:

DEFINE VARIABLE regexp               AS CLASS System.Text.RegularExpressions.Regex NO-UNDO.
regexp = NEW System.Text.RegularExpressions.Regex("^[0-9]~{6~}$").
IF NOT regexp:IsMatch(objKonprest:orderref) THEN
DO:
    MESSAGE "Orderref is not valid!"
           VIEW-AS ALERT-BOX.
end.

【讨论】:

  • 像魅力一样工作!我不知道那些必须逃脱。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多