这个正则表达式取代了什么?

时间:2014-03-07 11:55:26

标签: java regex string

我必须提到我仍然不明白正则表达式是如何工作的。请看下面的代码。

titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " ");

此处titleAndBodyContainerString。但是,它取代了什么?完全停止?逗号?问号?

5 个答案:

答案 0 :(得分:4)

它用空格替换后跟空格或输入结尾的点。

| dot (double-escaped)
|  | look ahead non-capturing group
|  |  | whitespace (double-escaped)
|  |  |  | or
|  |  |  || end of input ("$")
\\.(?=\\s|$)

检查API here

答案 1 :(得分:1)

enter image description here

图片来自: Regexper.com http://www.regexper.com/#\.%28%3F%3D\s|%24%29

示例:

System.out.println("Hello. ".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println("Hello.".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(".".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(". ".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(".com".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(". Hi".replaceAll("\\.(?=\\s|$)", "_"));

输出是:

Hello_ //there is a space after Hello_
Hello_//no space this time
_
_ //again, space after _
.com
_ Hi

重要的是不消耗空白字符或行尾字符。它们仅用于检查匹配,但不替换。这就是为什么在第一个例子中"Hello. "导致"Hello_ "而不只是"Hello_"

答案 2 :(得分:0)

在您的代码中,它用空格(.)替换所有点()。但有条件。点必须在白色空间之前或在行尾。

例如:

alex is dead. and alive.dead   
alex is dead.

在上面的两个例子中,它只会替换dead之后的点,因为它有空格或行尾。

答案 3 :(得分:0)

它用空格替换点后跟空格字符\t\n\x0B\f\rend of lineend of input

答案 4 :(得分:0)

titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " ");

这匹配一个点(.)后跟一个空格或字符串的结尾,并用空格替换它。

如果您想要替换?/(),也可以尝试以下内容:

titleAndBodyContainer = titleAndBodyContainer.replaceAll("[\\.\\?\\/\\(\\)](?=\\s|$)", " ");