Java 这个正则表达式替换了什么?

Java 这个正则表达式替换了什么?,java,regex,string,Java,Regex,String,我必须指出,我仍然不明白正则表达式是如何工作的。请看下面的代码 titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " "); 这里,titleAndBodyContainer是一个字符串。但是,它用空间代替了什么呢?句号?逗号?问号?它将一个点后跟空格或输入的末尾替换为空格 | dot (double-escaped) | | look ahead non-capturing group | |

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

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

这里,
titleAndBodyContainer
是一个
字符串
。但是,它用空间代替了什么呢?句号?逗号?问号?

它将一个点后跟空格或输入的末尾替换为空格

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

检查API。

它将点后跟空格或输入的末尾替换为空格

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

检查API。

在代码中,它将所有点(
)替换为空格(
)。但有一个条件。点必须位于空白之前或行尾

例如:

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

在以上两个示例中,它将只替换
死后的点,因为它有空格或行尾。

在代码中,它将所有点(
)替换为空格(
)。但有一个条件。点必须位于空白之前或行尾

例如:

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

在以上两个示例中,它将只替换
后的点,因为它有空格或行尾。

它将点后跟空格字符
\t\n\x0B\f\r
行尾
输入结束
替换点后跟空格字符
\t\n\x0B\f\r
行尾
输入端
带空格

图片来源: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”

图片来源: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”

这将匹配一个点(
),后跟一个空格或字符串的结尾,并将其替换为一个空格

| dot (double-escaped)
|  | look ahead non-capturing group
|  |  | whitespace (double-escaped)
|  |  |  | or
|  |  |  || end of input ("$")
\\.(?=\\s|$)
如果还想替换
?/()
,可以尝试以下操作:

titleAndBodyContainer = titleAndBodyContainer.replaceAll("[\\.\\?\\/\\(\\)](?=\\s|$)", " ");
这将匹配一个点(
),后跟一个空格或字符串的结尾,并将其替换为一个空格

| dot (double-escaped)
|  | look ahead non-capturing group
|  |  | whitespace (double-escaped)
|  |  |  | or
|  |  |  || end of input ("$")
\\.(?=\\s|$)
如果还想替换
?/()
,可以尝试以下操作:

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

我的好朋友,这意味着它不会取代“,?,/,(,),-等”@gloryofsucces很好不。我的好朋友,这意味着它不会取代“,?,/,(,),-等”@gloryofsucces很好不。Regex教练有一个很好的解释正则表达式的机制。Regex教练有一个很好的解释正则表达式的机制。