Regex 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中指定第二个字符应为大写? 还有,检查变量是否包含以大写字母开头的单词组 提前谢谢 匹配项不支持正则表达

我想检查变量是否为pascal大小写,在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。