我遇到正则表达式问题。我有一个这样的字符串:
LazyStreamContent
我希望找到"值"之后的所有反斜杠和空格,到目前为止,我已经想出了这个:
if(isset($_POST['Submit'])) {
$AnsQ1 = $_POST["Q1"];
if ($AnsQ1 == "Security") {
$Score = $Score + 1;
} else {
$check = false;
}
}
如何找到更多的反斜杠和空格?
建议的解决方案在java中运行良好:
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
如何将其更改为不删除匹配项,但将其替换为例如" *"?
答案 0 :(得分:2)
您想删除value=
子字符串后的所有空格和反斜杠。
因此,要移除的模式是[\s\\]
,但诀窍是使其仅在某个值之后匹配。这是\G
operator可以提供帮助的情况。您可以将value=
或上一个匹配的结尾与(\\G(?!^)|value=)
匹配,然后使用([^\\\\\\s]*)
转到空白或反斜杠。注意捕获组,我们稍后可以使用替换模式中的$1$2
替换反向引用来恢复这些捕获。
您可以使用
s.replaceAll("(\\G(?!^)|value=)([^\\\\\\s]*)[\\s\\\\]+", "$1$2")
请参阅regex demo
<强>详情
(\\G(?!^)|value=)
- 第1组(其值由$1
引用):上一场比赛结束(\\G(?!^)
)或(|
)a {{1} } substring value=
- 第2组(其值以([^\\\\\\s]*)
引用):除空格($1
)或\s
字符以外的零个或多个字符\\
- 一个或多个空格([\\s\\\\]+
)或\s
字符