我正在研究Perl程序以解析XML并在数据上进行正则表达式字符串替换。我读了几篇有关使用Perl进行字符串替换的文章。
在用目标字符串替换源值时,它们正在使用一些$
变量($1
,$2
,$3
和$4
等)。模式在进行字符串比较时如何存储值?
请找到所需的示例代码。
<Para>
<Hyperlink Display="hide" Protocol="http" URN="https://www.basicurl.org/oid/10.1161/RIA.0000abc">
AHA
</Hyperlink>
(Free)
</Para>
<Para>
<Hyperlink Display="hide" Protocol="http" URN="https://www.abcd.com">
Background: some text with multiple lines
</Hyperlink>
(i have three lines of code)
</Para>
</Comment>
$Str =~ s|<Hyperlink\b[^\>]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)</Hyperlink>|<Emph Emph.Type="Italic">$1</Emph>$2$3|g;
据我了解,我们正在选择超链接数据并替换$str
中的值。 /g
代表全局替换。上面输入文件中的$1
,$2
和$3
的值是什么?
答案 0 :(得分:2)
使用正则表达式模式时,有一个称为捕获组的东西,它们由模式中的括号(...)
分隔。它们按其开头括号在模式中出现的顺序编号,并用于将字符串的一部分保存到内置Perl变量$1
,$2
等中。
例如/(Hello?)(goo?d)/
在hello
中捕获hell
或$1
,在good
中捕获god
或$2
$Str =~ s|<Hyperlink\b[^\>]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)</Hyperlink>|<Emph Emph.Type="Italic">$1</Emph>$2$3|g;
([^\xFF]*?)
将捕获从0到无限次不等于FF(十六进制)的任何字符。它可以捕获0个或更多不等于"\xFF"
([12][890][0-9]{2})
将捕获数字1
或2
,然后捕获数字8
9
或0
,然后捕获数字从0
到9
的两位数。
([^\xFF]*?)
与第一个捕获组相同