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.comhttp://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.comhttp://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教练有一个很好的解释正则表达式的机制。