我尝试为以下内容创建正则表达式:
STRING sou_u02_mlpv0747_CCF_ASB001_LU_FW_ALERT|/opt/app/medvhs/mvs/applications/cm_vm5/fwhome/UnifiedLogging|UL_\d{8}_CCF_ASB001_LU_sou_u02_mlpv0747_Primary.log.csv|FATAL|red|1h||fw_alert
REGEX----> /^[^#]\w+\|[^\|]+\|\w+\|\w+\|\w*\|\w*\|([^\|]+|)\|\w*$/
我无法在这里找出错误。
我通过引用另一个可以正常工作的正则表达式创建了上面的代码,
/^[^#]\w+\|[^\|]+\|([^\|]+|)\|[rm]\|(in|out|old|new|arch|missing)\|\w+\|([0-9-,]+|)\|\w*\|\w*$/
sou_u02_mlpv0747_CCF_ASB001_LU_ODR|/opt/app/medvhs/mvs/applications/cm_vm5/components/CCF_ASB001_LU/SPOOL/ODR||r|out|30m|0400-1959|30m|gprs_in_stag
有人可以帮帮我吗。任何线索都将受到高度赞赏。
答案 0 :(得分:2)
让我们从简要看一下源文本(包括的第一个文本)开始。
它由用|
字符分隔的“部分”组成。
此字符(|
)必须与\|
匹配。记住前面的内容
反斜杠,否则,“裸” |
表示替代分隔符
(您曾在一个地方使用它)。
现在看一下每个部分(在|
之间):
\w+
)。[^|]+
匹配(此处,
在[
和]
之间,竖线可能未转义)。现在让我们编写每个节及其“类型”:
sou_u02_..._FW_ALERT
-单词字符。/opt/app/.../UnifiedLogging
-其他字符(由于斜杠)。UL_\d{8}_..._Primary.log.csv
-其他字符(由于\d{8}
和点)。FATAL|red|1h
-由单词char组成的3个部分。|
字符之间。fw_alert
-单词字符。现在,如何匹配这些组以及分隔的|
:
\w+\|
-字符和竖线(转义)。(?:[^|]+\|){2}
-不可捕获
组-(?:...)
,包含一系列“其他”字符-[^|]+
和竖线-\|
,发生两次{2}
。(?:\w+\|){3}
-与
上一点。([^|]+|)\|
,一个捕获小组-
(...)
,有2个替代选择...|...
。第一种选择是
[^|]+
(一系列“其他”字符)和第二个替代项
是空的。捕获组之后有\|
以匹配垂直
酒吧。\w+
-字字符。这次没有\|
,因为这是最后一次
部分。到目前为止组装的正则表达式必须为:
^
(字符串的开头)和$
(字符串的结尾)。因此,与您的源文本匹配的整个正则表达式可以是:
^\w+\|(?:[^|]+\|){2}(?:\w+\|){3}([^|]+|)\|\w+$
实际上,唯一的捕获组可以用其他方式编写,
为([^|]*)
-没有替代方案,但以*
作为
重复计数,也允许空内容。
您的选择,要应用的变体。
答案 1 :(得分:0)
第三场
UL_\d{8}_CCF_ASB001_LU_sou_u02_mlpv0747_Primary.log.csv
包含反斜杠\
,大括号{
}
和点.
。 \w
还请注意,无需在字符类内对管道|
进行转义:[^|]+
很好