正则表达式:是否可以搜索字符串“string”?但不是 'string({'

发布于 2024-08-17 09:19:09 字数 251 浏览 8 评论 0原文

我试图找出目录中所有文件中出现的所有具体单词(使用已弃用的 API 的方法调用)。我需要一个正则表达式来查找所有不包含更新调用(新 API)的此类事件。你能帮我吗?

示例:

  • deprecated api: method(a,b,c)
  • new api: method({a:a, b:b, c:c})

正则表达式应该找到包含“method”但不包含“method({”.

谢谢。

I am trying to find out all occurences of my concrete word (method call with deprecated API) in all files in a directory. I need a regexp to find all such occurences which do not contain updated call (new API). Can you help me please?

Example:

  • deprecated api: method(a,b,c)
  • new api: method({a:a, b:b, c:c})

The regexp should find all files containing 'method' but not 'method({'.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

葬シ愛 2024-08-24 09:19:09

我想说正确的方法是使用否定前瞻运算符,?!

/method(?!\(\{)/

上面指出,“任何方法的出现不是 后跟 ({"

它比建议的 /method([^{]/ 更能满足您的要求,因为后者与字符串结尾不匹配(即 abc abc 方法) 并且它不能很好地处理您请求的两个字符 ({ 的组合。

I'd say the proper way is to use the negative look-ahead operator, ?!

/method(?!\(\{)/

The above states, "any occurence of method that is not followed by ({"

It meets your requirements better than the suggested /method([^{]/ as the latter does not match string end (i.e. abc abc method) and it doesn't handle the combination of two characters ({ that you requested very well.

葬シ愛 2024-08-24 09:19:09
betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

解释一下: [ ] 定义了一个字符类 - 即该位置的字符可以匹配该类中的任何内容。

作为该类的第一个字符的 ^ 是一个否定:它意味着该类匹配除该类中定义的字符之外的任何字符。

{ 当然是我们关心的唯一在这种情况下不匹配的字符。

因此,在某些情况下,这将匹配任何包含字符 method( 后跟任何字符 除了 { 的字符串。

您还可以使用其他方法相反:

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w 在这种情况下(假设 C 语言环境)相当于 [0-9A-Za-z] 如果您想允许一个可选空格,你可以尝试:(

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

在 grep 语法中,[:alnum:] 与\w相同;[:space:]指任何空白字符 - 这在大多数正则表达式实现中表示为\s`)

betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

To explain: [ ] defines a character class - ie, the character in this position can match anything inside the class.

The ^ as the first character of the class is a negation: it means that this class matches any character except the characters defined in this class.

The { of course is the only character we care about not matching in this case.

So in some, this will match any string that has the characters method( followed by any character except {.

There are other ways you could do this instead:

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w in this case is (assuming the C locale) equivalent to [0-9A-Za-z]. If you want to allow an optional space, you could try:

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

(in grep syntax, [:alnum:] is the same as\w;[:space:]refers to any whitespace character - this is represented as\s` in most regex implementations)

﹂绝世的画 2024-08-24 09:19:09

您可以使用字符类来排除以下 {,例如

/method\([^{]/

You can use character classes to exclude a following {, e.g.

/method\([^{]/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文