两个分隔符之间的字符

时间:2012-06-21 06:23:12

标签: regex

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

输入:

abc_def_ghi_

理想的正则表达式结束:

def_ghi

我尝试过很多组合,例如thsi。

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

任何帮助表示赞赏。

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

3 个答案:

答案 0 :(得分:4)

所以这是第一个_和最后_之间的所有内容(都排除在外)?

然后尝试

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

(希望你没有使用JavaScript)

<强>解释

(?<=_)  # Assert that the previous character is a _
.*      # Match any number of characters...
(?=_$)  # ... until right before the final, string-ending _

答案 1 :(得分: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

答案 2 :(得分:0)

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

"threat_name":"PUP.Optional.Wajam"

格式用双引号括起字段名,然后是冒号,然后用双引号括起来。

这就是为什么我最终要避免标点符号破坏正则表达式。

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

(来自regex101.com)

  • threat_name字面匹配字符threat_name(区分大小写)
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符&#34;字面意思(区分大小写)
  • [:]匹配下面列表中的单个字符
  • :字面字符:
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符&#34;字面意思(区分大小写)
  • (?P<signature>.*?)命名捕获组签名
  • .*?匹配任何字符(换行符除外)
  • Quantifier: *?在零和无限次之间,尽可能少的次数, 根据需要扩展[懒惰]
  • ["]匹配下面列表中的单个字符
  • "列表中的单个字符&#34;字面意思(区分大小写)