作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这段文本 (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.
对于第二个,我会尝试做前瞻:
$ perl -nle 'print $1 if /(?!#.+)(_\w+)/' file.txt
这将再次匹配所有内容,包括我不想要的 #
行。
#
行(换句话说,如何否定正则表达式)?最佳答案
你可以使用
/#.+(*SKIP)(*F)|_\w+/
或者,在单词边界处匹配 _
:
/#.+(*SKIP)(*F)|\b_\w+/
模式匹配
#.+(*SKIP)(*F)
- #
和除换行字符外的任意1个或多个字符尽可能多,然后匹配被跳过、省略、丢弃,并从跳过匹配的地方搜索下一个匹配|
- 或者_\w+
- 一个 _
,然后是任何 1 个或多个单词字符。关于regex - 如何用 lookbehind 否定 perl 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600256/
我是一名优秀的程序员,十分优秀!