我在使用正则表达式时遇到问题。我有一个这样的字符串:
host=HOME_SERVER value=\"83.169.217.62 - km-meat-170929 [04/May/2018:00:01:13 +0300] \\\"POST /platform/services/2.0/EnterpriseService HTTP/1.1\\\" 200 4075 \\\"-\\\" \\\"1C+Enterprise/8.3\\\" 0.141\" 1526823558639987327
我想在“值”之后找到所有反斜杠和空格,到目前为止我想出了这个:
value(.+)
如何找到更多的反斜杠和空格?
建议的解决方案在 java 中工作正常:
s.replaceAll("(\\G(?!^)|value=)([^\\\\\\s]*)[\\s\\\\]+", "$1$2")
如何将其更改为不删除匹配项,而是将它们替换为例如“*”?
您想删除value=
子字符串后的所有空格和反斜杠。
因此,要删除的模式是[\s\\]
,但诀窍是使其仅在某个值后匹配。在这种情况下,\G
操作员可以提供帮助。您可以value=
将上一场比赛的结尾或结尾与 匹配,(\\G(?!^)|value=)
然后使用([^\\\\\\s]*)
. 注意捕获组,我们稍后可能会使用$1$2
替换模式中的替换反向引用来恢复这些捕获。
您可以使用
s.replaceAll("(\\G(?!^)|value=)([^\\\\\\s]*)[\\s\\\\]+", "$1$2")
查看正则表达式演示
细节
(\\G(?!^)|value=)
- 第 1 组(其值用 表示$1
):前一个匹配的结尾 ( \\G(?!^)
) 或 ( |
)value=
子字符串([^\\\\\\s]*)
- 第 2 组(其值用 表示$1
):除空格 ( \s
) 或\\
字符以外的零个或多个字符[\\s\\\\]+
- 一个或多个空格 ( \s
) 或\\
字符本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句