尝试将regex表达式放在一起,返回_和_ $之间的字符串(其中$是字符串的结尾)。
输入:
abc_def_ghi_
理想的正则表达式结束:
def_ghi
我尝试过很多组合,例如thsi。
((([^_]*){1})[^_]*)_$
任何帮助表示赞赏。
注意:上面的正则表达式返回abc_def,而不是所需的def_ghi。
答案 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;字面意思(区分大小写)