Ser*_*ept 0 java regex newline match
这是我的字符串
REGISTER sip:192.168.178.1 SIP/2.0
Call-ID: bla@192.168.178.60
CSeq: 1441 REGISTER
From: "620" <sip:620@192.168.178.20>;tag=bla
To: "620" <sip:620@192.168.178.20>
Via: SIP/2.0UDP 192.168.178.60:59488;branch=bla;rport
Max-Forwards: 70
User-Agent: bla
Contact: *
Expires: 0
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)
所以这个字符串有几个换行符.我的正则表达式采用以下形式:
sipRequest = sipRequest.replaceFirst("(From: \")(.*)(\" <sip:)(.*)@(.*)>", "$1$2$3$4@" + sipServer + ">");
Run Code Online (Sandbox Code Playgroud)
这个正则表达式匹配,但不是以下一个:
sipRequest = sipRequest.replaceFirst("(^From: \")(.*)(\" <sip:)(.*)@(.*)>", "$1$2$3$4@" + sipServer + ">");
Run Code Online (Sandbox Code Playgroud)
注意:唯一的区别是"From"之前的"^"符号.那么为什么这个表达不匹配?它从一个新行开始,所以它应该匹配.
感谢帮助.
引用JavaDoc Pattern:
默认情况下,正则表达式^和$忽略行终止符,并且仅分别匹配整个输入序列的开头和结尾.如果激活MULTILINE模式,则^在输入开始时和任何行终止符之后匹配,但输入结束时除外.当处于MULTILINE模式时,$匹配在行终止符之前或输入序列的结尾.
所以你需要设置多行标志,因为默认的含义^是字符串的开头,而不是行的开头.