Regex OpenEdge中的正则表达式
我想检查变量是否为pascal大小写,在OpenEdge中 我找到了Regex OpenEdge中的正则表达式,regex,progress-4gl,openedge,Regex,Progress 4gl,Openedge,我想检查变量是否为pascal大小写,在OpenEdge中 我找到了匹配的运算符,并编写了以下代码: define variable cVariable as character no-undo. cVariable = "cPascalCase":U. message cVariable matches 'c[A-Z]*':U. 但它不起作用,它显示“不”。有没有办法在OpenEdge中指定第二个字符应为大写? 还有,检查变量是否包含以大写字母开头的单词组 提前谢谢 匹配项不支持正则表达
匹配的运算符,并编写了以下代码:
define variable cVariable as character no-undo.
cVariable = "cPascalCase":U.
message cVariable matches 'c[A-Z]*':U.
但它不起作用,它显示“不”。有没有办法在OpenEdge中指定第二个字符应为大写?
还有,检查变量是否包含以大写字母开头的单词组
提前谢谢 匹配项
不支持正则表达式。表示它只需要像
和*
这样的简单通配符。如果您知道您的代码将始终在Windows上运行,您可以选择运行.NET代码:
USING System.Text.RegularExpressions.*.
DEF VAR cVariable AS CHAR NO-UNDO INITIAL "cPascalCase".
DEF VAR regexp AS CLASS Regex NO-UNDO.
regexp = NEW Regex("c[A-Z]*").
MESSAGE regexp:IsMatch(cVariable).
FINALLY:
DELETE OBJECT regexp.
END.
除非使用.NET类,否则不能在进程中使用正则表达式,但您的需求可以通过一个简单的函数轻松实现
FUNCTION isPascalCase RETURNS LOGICAL
(cString AS CHARACTER):
IF LENGTH(cString) < 2 THEN
RETURN FALSE.
RETURN SUBSTRING(cString,1,1) = "c" AND
ASC(SUBSTRING(cString,2,1)) = ASC(UPPER(SUBSTRING(cString,2,1))).
END FUNCTION.
MESSAGE isPascalCase("cpascalCase").
函数isPascalCase返回逻辑
(以字符形式显示):
如果长度(cString)<2,则
返回FALSE。
返回子字符串(cString,1,1)=“c”和
ASC(子串(cString,2,1))=ASC(上部(子串(cString,2,1)))。
结束函数。
消息isPascalCase(“cpascalCase”)。
Progress不直接支持正则表达式
有关使用正则表达式的一些示例:
进度变量不区分大小写。要使用区分大小写的字符串,可以将变量声明为区分大小写,如下所示:
define variable s as character no-undo case-sensitive.
display "aBc" matches "abc".
s = "aBc".
display s matches "abc".
display s matches "a*c".
或者您可以使用UPPER()和LOWER()、ASC()和CHR()函数进行逐字符比较。您可以使用我开发的类。这本书在美国有售。此类添加了对Windows和HP-UX 11.31 ia64的Perl正则表达式的支持
它很容易使用。只需执行以下操作:
DEFINE VARIABLE cl_regex AS CLASS Regex NO-UNDO.
DEFINE VARIABLE ch_pattern AS CHARACTER NO-UNDO CASE-SENSITIVE.
ASSIGN
ch_pattern = "c[A-Z]*"
cl_regex = NEW Regex().
/* should display: "No" */
MESSAGE cl_regex:mMatch( "ctest", ch_pattern, "" )
VIEW-AS ALERT-BOX.
请注意,您必须转义模式中的特殊字符,如下所述:否则它将无法按预期工作。但是您的正则表达式只满足第一个要求,不是吗?您可以很容易地编写一个函数来验证它,第二个更难,但正则表达式也是如此,除非您使用字典,否则如何验证词组?如果你只对第一个感兴趣,我将用一个简单的函数来回答。正则表达式对于ABL来说是非常未来的。@LievenCardoen该死的11枚金徽章?真恶心!我发现了,显然是因为我问了很多问题,这让我比其他任何事情都愚蠢。。。著名问题(金牌):问了一个有10000个观点的问题。此徽章可授予多次。我会以最高的出价出售我的金徽章。我想使用它,但我不断收到错误:“未知字段或变量名-DLL-CALL-TYPE.201”@kuhle您的服务器是HP-UX 11.31 IA64还是Linux?如果是Linux,您必须提供自己的lib/libpcre.so,因为我提供的lib/libpcre是为HP-UX 11.31安腾64平台编译的。如果您想在Windows上使用它,它应该可以工作,但可能您必须自己编译pcre3 DLL。