gpt4 book ai didi

regex - 如何用 lookbehind 否定 perl 正则表达式?

转载 作者:行者123 更新时间:2023-12-02 16:36:38 26 4
gpt4 key购买 nike

我有这段文本 (file.txt) 需要检查:

_abcd
_efgh
#, _1

现在我只想匹配带下划线但前面没有散列 # 的单词。一切尽在我手

$perl -nle 'print $1 if /(_\w+)/' file.txt

但我不想匹配散列,所以我会尝试lookbehind:

$ perl -nle 'print $1 if /(?<!#.+)(_\w+)/' file.txt

Variable length lookbehind not implemented in regex m/(?<!#.+)(_\w+)/ at -e line 1.
  1. 如何在 perl 中实现变长回顾?

对于第二个,我会尝试做前瞻:

$ perl -nle 'print $1 if /(?!#.+)(_\w+)/' file.txt

这将再次匹配所有内容,包括我不想要的 # 行。

  1. 如何匹配所有,除了 # 行(换句话说,如何否定正则表达式)?

最佳答案

你可以使用

/#.+(*SKIP)(*F)|_\w+/

或者,在单词边界处匹配 _:

/#.+(*SKIP)(*F)|\b_\w+/

模式匹配

  • #.+(*SKIP)(*F) - # 和除换行字符外的任意1个或多个字符尽可能多,然后匹配被跳过、省略、丢弃,并从跳过匹配的地方搜索下一个匹配
  • | - 或者
  • _\w+ - 一个 _,然后是任何 1 个或多个单词字符。

关于regex - 如何用 lookbehind 否定 perl 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600256/

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