如何在 ABAP 中使用 RegEx 查找任何非数字字符

How to find any non-digit characters using RegEx in ABAP

我需要一个正则表达式来检查一个值是否包含除 0 到 9 之间的数字之外的任何其他字符。

我也想检查值的长度。

我制作的正则表达式:^([0-9]\d{6})$

我的测试值为:123Z45和123456

ABAP代码:

FIND ALL OCCURENCES OF REGEX '^([0-9]\d{6})$' IN L_VALUE RESULTS DATA(LT_RESULTS).

当我测试第一个测试值“123Z45”时,我期待 LT_RESULTS 的结果,因为有一个非数字字符。

但是 LT_RESULTS 几乎每个测试用例都是空的。

您的表达式 ^([0-9]\d{6})$ 转换为:

  • ^ - 输入开始
  • ( - 开始捕获组
    • [0-9] - 0 到 9 之间的字符
    • \d{6} - 六位数字(数字 = 0 到 9 之间的字符)
  • ) - 结束捕获组
  • $ - 输入结束

所以它只会匹配1234567(7位数字字符串),而不是123456,或123Z45

如果您只需要查找包含非数字的字符串,您可以使用以下代码:^\d*[^\d]+\d*$

  • * - 前一个元素可能出现零次、一次或多次
  • [^\d] - [ 之后的 ^ 表示 "NOT",即任何不是数字的字符
  • + - 前一个元素可能出现一次或多次

示例:

const expression = /^\d*[^\d]+\d*$/;
const inputs = ['123Z45', '123456', 'abc', 'a21345', '1234f', '142345'];

console.log(inputs.filter(i => expression.test(i)));

如果你想提取非数字组,你也可以使用这个character class

DATA(l_guid) = '0074162D8EAA549794A4EF38D9553990680B89A1'.

DATA(regx) = '[[:alpha:]]+'.

DATA(substr) = match( val   = l_guid
                      regex = regx
                      occ   = 1 ).

它找到第一个出现的非数字字符组并显示它。

如果您只想检查它们是否存在或它们有多少驻留在您的字符串中,计数内置函数是您的朋友:

DATA(how_many) = count( val = l_guid regex = regx ).

DATA(yes) = boolc( count( val = l_guid regex = regx ) > 0 ).

Match and count 自 ABAP 7.50 以来存在。

如果您不需要正则表达式来处理更复杂的内容,ABAP 为您提供了一些不错的比较运算符 CO(仅包含)、CA、NA 等。类似于:

IF L_VALUE CO '0123456789' AND STRLEN( L_VALUE ) = 6.