Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式替换中的变量插值_Regex_Perl - Fatal编程技术网

Regex 正则表达式替换中的变量插值

Regex 正则表达式替换中的变量插值,regex,perl,Regex,Perl,我正在编写Perl程序来解析XML,并对数据进行正则表达式字符串替换。我读了几篇关于使用Perl进行字符串替换的文章 在用目标字符串替换源值时,它们使用了一些$变量($1、$2、$3和$4等)。在进行字符串比较时,模式如何存储值 请找到一些我正在寻找的示例代码 示例XML文件 啊哈 (免费) 背景:一些有多行的文本 (我有三行代码) 目标成就 $Str=~s |]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)|$1$2$3 | g; 据我所知,我们

我正在编写Perl程序来解析XML,并对数据进行正则表达式字符串替换。我读了几篇关于使用Perl进行字符串替换的文章

在用目标字符串替换源值时,它们使用了一些
$
变量(
$1
$2
$3
$4
等)。在进行字符串比较时,模式如何存储值

请找到一些我正在寻找的示例代码

示例XML文件

啊哈
(免费)
背景:一些有多行的文本
(我有三行代码)
目标成就
$Str=~s |]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)|$1$2$3 | g;

据我所知,我们正在选择超链接数据并替换
$str
中的值。
/g
表示全局替换。上述输入文件中的
$1
$2
$3
的值是什么?

使用正则表达式模式时,有一种称为捕获组的东西,在模式中用括号
(…)
分隔。它们按其左括号在模式中出现的顺序编号,并用于将字符串的一部分保存到内置Perl变量
$1
$2

例如,
/(Hello?)(goo?d)/
$1
中捕获
你好
地狱
,在
$2
中捕获
上帝


关于你的例子
$Str=~s |]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)|$1$2$3 | g;
  • ([^\xFF]*?)
    将捕获从0到无限次不等的任何不等于FF(十六进制)的字符。它可以捕获0个或更多不等于
    “\xFF”

  • ([12][890][0-9]{2})
    将捕获一个数字
    1
    2
    ,后跟一个数字
    8
    9
    0
    ,后跟从
    0
    9
    的两个数字

  • ([^\xFF]*?)
    与第一个捕获组相同


当您使用正则表达式模式时,有一种称为捕获组的东西,它在模式中由括号
(…)
分隔。它们按其左括号在模式中出现的顺序编号,并用于将字符串的一部分保存到内置Perl变量
$1
$2

例如,
/(Hello?)(goo?d)/
$1
中捕获
你好
地狱
,在
$2
中捕获
上帝


关于你的例子
$Str=~s |]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)|$1$2$3 | g;
  • ([^\xFF]*?)
    将捕获从0到无限次不等的任何不等于FF(十六进制)的字符。它可以捕获0个或更多不等于
    “\xFF”

  • ([12][890][0-9]{2})
    将捕获一个数字
    1
    2
    ,后跟一个数字
    8
    9
    0
    ,后跟从
    0
    9
    的两个数字

  • ([^\xFF]*?)
    与第一个捕获组相同


如果需要解析XML,请使用XML解析库,如或多种备选方案之一。代码已经实现,我正在尝试删除遗留系统,并用新技术重新实现。因此,我需要一些关于理解上述输入的正则表达式的帮助。有关捕获组和捕获变量
$1
$2
,…的更多信息,请参阅…如果需要解析XML,请使用XML解析库,如或多种可选方法之一。代码已经实现,我正在尝试删除遗留系统,并用新技术重新实现。因此,我需要一些帮助来理解上述输入的正则表达式。有关捕获组和捕获变量
$1
$2
,…的更多信息,请参阅…只是一个建议:可能还需要提到捕获组是通过将正则表达式或部分正则表达式括在括号中创建的?是的,您是对的。我只是用这个例子来解释是的,这是一个很好的例子。我唯一的建议是更明确一点。。一个新来者可能不像我们那么容易理解所有的事情。谢谢,但是你删除了关于懒惰量词的解释。如果使用*,则会产生不同的结果?或者只是*@Borodin看起来很棒!只是一个建议:可能还提到捕获组是通过将正则表达式或部分正则表达式括在括号中创建的?是的,你是对的。我只是用这个例子来解释是的,这是一个很好的例子。我唯一的建议是更明确一点。。一个新来者可能不像我们那么容易理解所有的事情。谢谢,但是你删除了关于懒惰量词的解释。如果使用*,则会产生不同的结果?或者只是*@Borodin看起来很棒!
$Str =~ s|<Hyperlink\b[^\>]*?>([^\xFF]*?)([12][890][0-9]{2})([^\xFF]*?)</Hyperlink>|<Emph Emph.Type="Italic">$1</Emph>$2$3|g;