RegExp匹配一个单词后的某些字符

时间:2018-05-20 13:40:55

标签: regex

我遇到正则表达式问题。我有一个这样的字符串:

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

如何将其更改为不删除匹配项,但将其替换为例如" *"?

1 个答案:

答案 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字符