如何在ABAP中使用正则表达式查找任何非数字字符

3

我需要一个正则表达式来检查一个值是否包含除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都是空的。

3个回答

4
您的表达式^([0-9]\d{6})$的翻译如下:
  • ^ - 开头
  • ( - 开始捕获组
    • [0-9] - 一个介于0和9之间的字符
    • \d{6} - 六个数字(digit =介于0和9之间的字符)
  • ) - 结束捕获组
  • $ - 结尾
因此,它只匹配7位数字字符串1234567,不匹配123456123Z45
如果您只需要查找包含非数字的字符串,则可以改用以下表达式:^\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)));


0

如果您想提取非数字组,也可以使用此字符类

DATA(l_guid) = '0074162D8EAA549794A4EF38D9553990680B89A1'.

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

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

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

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

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

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

Matchcount自ABAP 7.50版本开始存在。


0
如果您不需要更复杂的正则表达式,ABAP为您提供了一些很好的比较运算符CO(仅包含)、CA、NA等。类似于:
IF L_VALUE CO '0123456789' AND STRLEN( L_VALUE ) = 6.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接