如何在 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 ).
如果您不需要正则表达式来处理更复杂的内容,ABAP 为您提供了一些不错的比较运算符 CO(仅包含)、CA、NA 等。类似于:
IF L_VALUE CO '0123456789' AND STRLEN( L_VALUE ) = 6.
我需要一个正则表达式来检查一个值是否包含除 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 ).
如果您不需要正则表达式来处理更复杂的内容,ABAP 为您提供了一些不错的比较运算符 CO(仅包含)、CA、NA 等。类似于:
IF L_VALUE CO '0123456789' AND STRLEN( L_VALUE ) = 6.