为了清晰起见,我希望将这个正则表达式格式化为多行。像这样:
$regexDatum = [regex] @"
^\<(?<TargetAddress>[0-9A-Fa-f][0-9A-Fa-f]),
(?<ReadStatus>\w\w),
(?<s1le>\d+),
(?<s1te>\d+),
(?<e1le>\d+),
(?<e1z>-{0,1}\d+),
(?<e1te>\d+),
(?<e2le>\d+),
(?<e2z>-{0,1}\d+),
(?<e2te>\d+),
(?<s2le>\d+),
(?<s2te>\d+),
"@
但我发现行尾的空格会引起问题,而反推似乎会使问题复杂化。因此,我被迫将所有内容放在一行 - 你好,专栏240 ......
大多数C编译器都允许我这样的东西(斜杠没有针对C编译器进行校正):
char[] regexDatum = "^\<(?<TargetAddress>[0-9A-Fa-f][0-9A-Fa-f]),"
"(?<ReadStatus>\w\w),"
"(?<s1le>\d+),"
"(?<s1le>\d+),"
"(?<s1te>\d+),"
"(?\<e1le>\d+),"
"(?<e1z>-{0,1}\d+),"
"(?<e1te>\d+),"
"(?<e2le>\d+),"
"(?<e2z>-{0,1}\d+),"
"(?<e2te>\d+),"
"(?<s2le>\d+),"
"(?<s2te>\d+),"
在PowerShell中是否有正确的方法来终止/继续文本块中的行?
奖金问题:
正则表达式模式字符串中是否允许注释?
(例如Perl允许(?# my comments)
或/x
修饰符)
答案 0 :(得分:3)
字符串连接是实现所需目标的一种方法:
$regexDatum = [regex](
'^\<(?<TargetAddress>[0-9A-Fa-f][0-9A-Fa-f]),' +
'(?<ReadStatus>\w\w),' +
'(?<s1le>\d+),' +
'(?<s1te>\d+),' +
'(?<e1le>\d+),' +
'(?<e1z>-{0,1}\d+),' +
'(?<e1te>\d+),' +
'(?<e2le>\d+),' +
'(?<e2z>-{0,1}\d+),' +
'(?<e2te>\d+),' +
'(?<s2le>\d+),' +
'(?<s2te>\d+),'
)
但是,使用IgnorePatternWhitespace
建议的regex option @PetSerAl可以说是更好的方法,因为它允许在字符串中缩进和注释表达式:
$regexDatum = @"
^\<(?<TargetAddress>[0-9A-Fa-f][0-9A-Fa-f]),
(?<ReadStatus>\w\w),
(?<s1le>\d+),
(?<s1te>\d+), # some comment
(?<e1le>\d+),
(?<e1z>-{0,1}\d+), # other comment
(?<e1te>\d+),
(?<e2le>\d+), # unimportant
(?<e2z>-{0,1}\d+),
(?<e2te>\d+),
(?<s2le>\d+),
(?<s2te>\d+),
"@
[regex]::Match($str, $regexDatum, [Text.RegularExpressions.RegexOptions]::IgnorePatternWhitespace)