提问人:FireBlast 提问时间:7/10/2017 更新时间:7/10/2017 访问量:128
不能用 ^ 说“all but”
Can't use ^ to say "all but"
问:
我有一个文本,我只想获取十六进制代码。 比如:“thisissometextthisistext\x64\x6f\x6e\x74\x74\x72\x61\x6e\x73\x6c\x61\x74\x65somemoretextoverhere”
可以使用 \x 获取十六进制代码。但似乎我不能做类似 (^\x..) 的事情来选择除十六进制代码之外的所有内容。
有什么解决方法吗?
答:
如果你已经能够找到带有正则表达式的十六进制码,那么你不能使用这些信息从字符串中删除所有十六进制码吗(如果你需要保留原始字符串,也可以从字符串的克隆中删除),你将留下除十六进制码之外的所有文本。
评论
尝试并替换为^.*?((\\x[a-f0-9]{2})+).*$
$1
它应该只留下十六进制代码
然后在更换后
^
仅在字符类内部(和开头)充当否定标记,不能使用它来否定多个字符的子字符串。
若要选择所有未选择的内容,可以使用以下模式:\xhh
\G(?:\\x[a-f0-9]{2})*+\K(?=.|\n)[^\\]*(?:\\(?!x[a-f0-9]{2})[^\\]*)*
它首先匹配 s,并使用功能将它们从匹配中删除(删除左侧的所有)。模式的另一部分匹配所有不是 .由于此子模式可以匹配字符串末尾的空字符串,因此我添加了 lookahead 以确保至少有一个字符。 强制所有匹配项连续进行。换句话说,它与上一场比赛结束时的位置相匹配。\xhh
\K
[^\\]*(?:\\(?!x[a-f0-9]{2})[^\\]*)*
\xhh
(?=.|\n)
\G
您可以使用正则表达式(将匹配并捕获十六进制值的任何 1+ 序列到第 1 组中,或者仅匹配任何其他字符,包括换行符字符)并替换为条件替换模式(将重新插入十六进制值链或将匹配项替换为空字符串):(?s)((?:\\x[a-fA-F0-9]{2})+)|.
(?{1}$1\n:)
查找内容:替换为: (?s)((?:\\x[a-fA-F0-9]{2})+)|.
(?{1}$1\n:)
正则表达式详细信息:
(?s)
- 与相同。
匹配换行符选项 ON((?:\\x[a-fA-F0-9]{2})+)
- 第 1 组捕获一个或多个序列\\x
-一个\\x
[a-fA-F0-9]{2}
- 2 个字母,从 to 或数字a
f
|
-或.
- 任何单个字符。
更换模式:
(?{1}
- 如果第 1 组匹配:$1\n
- 替换为其内容 + 换行符:
- else 替换为空字符串
)
- 替换模式的结束。
评论
\1
$1
评论
(?s)((?:\\x[a-fA-F0-9]{2})+)|.
(?1$1\n:)