3

试图将一个正则表达式放在一起,返回 _ 和 _$ 之间的字符串(其中 $ 是字符串的结尾)。

输入:

abc_def_ghi_

所需的正则表达式结果:

def_ghi

我已经尝试了很多组合,例如 thsi。

((([^_]*){1})[^_]*)_$

任何帮助表示赞赏。

注意:上面的正则表达式返回 abc_def,而不是所需的 def_ghi。

4

3 回答 3

4

所以它是第一个_和最后一个_(不包括)之间的一切?

然后尝试

(?<=_).*(?=_$)

(希望你没有使用 JavaScript)

解释:

(?<=_)  # Assert that the previous character is a _
.*      # Match any number of characters...
(?=_$)  # ... until right before the final, string-ending _
于 2012-06-21T06:27:14.490 回答
1

您可以尝试利用运营商的贪婪来发挥自己的优势:

^.*?_(.*)_$

匹配从开头(非贪婪)到下划线的所有内容,从下划线到字符串的结尾,它期望和下划线,然后是字符串的结尾,并在第一次匹配中捕获它。

^    Beginning of string
.*?  Any number of characters, at least 0
_    Anchor-tag, literal underscore
(.*) Any number of characters, greedy
_    Anchor-tag, literal underscore
$    End of string
于 2012-06-21T06:28:26.410 回答
0

我在一个更大的日志条目中搜索这个:

"threat_name":"PUP.Optional.Wajam"

该格式将字段名称用双引号括起来,然后是冒号,然后是双引号中的值。

这是我最终避免标点符号破坏正则表达式的结果..

threat_name["][:]["](?P<signature>.*?)["]

(来自 regex101.com)

  • threat_name从字面上匹配字符threat_name(区分大小写)
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符 " 字面意思(区分大小写)
  • [:]匹配下面列表中的单个字符
  • :文字字符:
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符 " 字面意思(区分大小写)
  • (?P<signature>.*?)命名捕获组签名
  • .*?匹配任何字符(换行符除外)
  • Quantifier: *?零到无限次之间,尽可能少,按需扩展[懒惰]
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符 " 字面意思(区分大小写)
于 2016-08-16T17:59:30.853 回答