gpt4 book ai didi

regex - perl 正则表达式替换中的条件

转载 作者:行者123 更新时间:2023-12-01 10:19:51 24 4
gpt4 key购买 nike

如果匹配一组,我正在尝试使用 perl regex one-liner 返回不同的替换结果。到目前为止,我有这个:

echo abcd |  perl -pe "s/(ab)(cd)?/defined($2)?\1\2:''/e"

但我得到
Backslash found where operator expected at -e line 1, near "1\"
(Missing operator before \?)
syntax error at -e line 1, near "1\"
Execution of -e aborted due to compilation errors.

如果输入是 abcd我要获取 abcd出去,如果是 ab我想得到一个空字符串。我哪里出错了?

最佳答案

您使用了正则表达式原子 \1\2 (匹配第一个或第二个捕获捕获的内容)在正则表达式模式之外。您打算使用 $1$2 (就像你在另一个地方所做的那样)。

此外,双引号字符串中的美元符号对您的 shell 有意义。最好在程序周围使用单引号[1]。

echo abcd | perl -pe's/(ab)(cd)?/defined($2)?$1.$2:""/e'

更简单:
echo abcd | perl -pe's/(ab(cd)?)/defined($2)?$1:""/e'

更简单:
echo abcd | perl -pe's/ab(?!cd)//'

  • 要么避免在程序中使用单引号[2],要么使用 '\''来“逃避”他们。
  • 您通常可以使用 q{}而不是单引号。您也可以切换到使用双引号。在双引号内,您可以使用 \x27为撇号。
  • 关于regex - perl 正则表达式替换中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43616380/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com