0

これは私の文字列です

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

したがって、この文字列にはいくつかの改行があります。私の正規表現は次の形式です。

sipRequest = sipRequest.replaceFirst("(From: \")(.*)(\" <sip:)(.*)@(.*)>", "$1$2$3$4@" + sipServer + ">");

この正規表現は一致しますが、次の正規表現には一致しません:

sipRequest = sipRequest.replaceFirst("(^From: \")(.*)(\" <sip:)(.*)@(.*)>", "$1$2$3$4@" + sipServer + ">");

注: 「From」の前の「^」記号のみが異なります。では、なぜこの式は一致しないのでしょうか。改行で始まるので、一致するはずです。

手伝ってくれてありがとう。

4

2 に答える 2

6

のJavaDocを引用Pattern

デフォルトでは、正規表現 ^ と $ は行末記号を無視し、それぞれ入力シーケンス全体の最初と最後でのみ一致します。MULTILINE モードが有効になっている場合、^ は入力の先頭と、入力の末尾を除く任意の行終端記号の後に一致します。MULTILINE モードの場合、$ は行末記号の直前または入力シーケンスの末尾に一致します。

^のデフォルトの意味は行の先頭ではなく文字列の先頭であるため、複数行フラグを設定する必要があります。

于 2013-01-01T16:40:47.937 に答える
3

この操作^は、 を使用している場合にのみ機能しPattern.MULTILINEます。オプションなしでパターンを作成するためstring.replaceAll()、マッチャーを作成してマッチャーの置換機能を使用するよりも、自分でパターンを作成する必要があります。

于 2013-01-01T16:41:28.337 に答える