[英]Regex does not contain certain words
我正在寻找一个正则表达式,该表达式将从巨大的文本文件中排除以下单词。
@author
@Autowired
@Override
@param
@SuppressWarnings
我已经尝试过了,但是没有按预期工作。
@[^(author)(Autowired)(Override)(param)(SuppressWarnings)].*
您可以使用否定的前瞻:
@(?!author|Autowired|Override|param|SuppressWarnings)\S+
基本上,它会寻找一个@
,后面没有该单词列表,然后与之匹配的所有非空白字符。
正则表达式中的方括号用于字符类。 当您将一个字符列表放在方括号中时,它将匹配一个字符 ,该字符是列出的字符之一。 所以
[author]
匹配一个字符(如果是a
, h
, o
, r
, t
或u
。 它不查找author
一词。 将^
放在前面也会查找不在列表中的一个字符:
[^author]
匹配一个字符,只要它不是a
, h
, o
, r
, t
或u
。
但是这里的关键是[]
不能用于匹配单词或其他序列。 在您的示例中
@[^(author)(Autowired)(Override)(param)(SuppressWarnings)].*
方括号中的部分与一个不是(
, a
, u
或其他任何出现在方括号中的字符)匹配(这些字符中的许多字符出现多次,但这并不影响任何字符)。
要翻转脚本,如果您实际上是在尝试获取文本文件并删除关键字列表中的内容,则可能需要使用以下语法查找它们: @(author|AutoWired|Override|param|SuppressWarnings)\\b
。 终端\\b
只是为了避免@authority或其他不太可能的预防措施。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.