![]() |
1
10
你需要 look-around assertions .
你考虑过读一两本Perl书吗?如果你不得不去栈溢出来问那些可以通过阅读好的文档轻松回答的问题,那么你就没有有效地学习。 |
![]() |
2
5
您可以放弃那些花哨的lookahead或lookaround断言,并提出一个稍长的正则表达式:
它可能更容易阅读,但它有点违反直觉,因为你要替换
|
![]() |
3
4
如果您只想替换标记之间的文本,那么您可能需要查看 lookahead and lookbehind assertions . 您需要使用除“/”之外的regex分隔符,或者在regex中转义“/”:
|
![]() |
4
3
首先,/in被解释为模式的结尾,这会导致语法错误。为替换运算符选择其他分隔符:
但是你有一组捕获括号,你没有使用它们捕获的内容。这让我觉得,也许即使修改语法也不能提供您想要的行为。您不想替换标记,因此可以将这些标记添加到替换中:
或者根本不使用lookarounds替换它们,这样它们就不是匹配文本的一部分:
但考虑到“它不起作用”并不是很好地描述这个问题,我不知道你希望看到什么。 |
![]() |
5
1
首先,结束语中的/被视为正则表达式的结束引号。或者反斜杠:
或者在regex中使用不同的字符:
其次,我猜您是在尝试用这个来解析XML文档并更改数据。我也猜你有
许多的
你可以使用一个非贪婪的匹配,这是一个将匹配 尽可能少 . 你可以在*后面加一个问号,这样:
因为这仍然取代了
如果你的
为什么要3美元?因为2美元是你捕获的任何东西
对于这个问题,它可能和你能得到的效率一样高。
顺便提一句,尝试用正则表达式解析XML通常是个坏主意,因为XML的变化太大,正则表达式无法解析。我很喜欢
这都包括在
希望所有的例子都能帮助我们澄清一些事情。 |
![]() |
6
1
为了尽可能简单,您有许多问题,所以让我们先消除明显的问题。
首先,不能使用斜线字符(“
现在Perl将解释
其次,你的正则表达式是错误的。s///regex指示Perl用第二节中的模式替换/重新格式化第一节中的模式。您的指令告诉Perl用“000”替换前两个斜杠之间的所有内容,并将其赋给变量$A。 您在regex中使用的方括号允许您将表达式分解为smnaller片段并重新排列内容,但是您没有使用它们,但是您走的是正确的道路。若要重新使用要保留的第一组斜线中表达式的部分,请在它们周围放置括号。在表达式的第二部分中,您可以使用$1、$2等来引用这些“片段”,以引用每个括号集中的内容。 记住这一点,你可能会想到一些类似的事情:
这很接近(如上所述),但测试将显示它仍然不太正确;更令人迷惑的是,这次您将得到的输出是
以下表达式
将
工作,但你会得到一个空间后,第一个,所以你的输出将是
我的首选是用一个变量代替字符串“000”,因此我的代码可能看起来像这样:
在我看来,使用一个变量可以让事情更清楚一些(尽管它们的名字可能更好!)而且还允许文本被替换(“000”)很容易更改,而不必与regex混淆。这个?在regex中,这是为了确保regex不会“贪心,如果字符串中有一组以上的无元素-这会导致在遇到匹配模式时,.*到sstop匹配,在本例中是”。 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 2 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 2 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 2 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 6 年前 |