Android で次のテキストが変更されないのはなぜですか?
String content = "test\n=test=\ntest";
content = content.replaceAll("^=(.+)=$", "<size:large>$1</size:large>")
元の値を変更せずに返します。私はそれが真ん中=test=
を<size:large>test</size:large>
ここで何が欠けていますか?
編集:わかりました、私は理由を理解していますが、うまく^
いき$
ません。ポイントは、行頭と行末の両方でテキストに一致する何かが必要だということです。たとえば、「=some text=」のみを含む行です。次の理由により、与えられた回答のほとんどは十分ではありません。
=(.+)=
は行末とは何の関係もないため、並んで=
いない 2 つの行と一致します。
.*=(.+)=.*
行全体に一致しますが、前と同じ問題があります
\n=(.+)=\n
近くなりますが、2 行連続には一致しません (例test\n=test=\n=test=\ntest
) 最初または最後の行のインスタンスにも一致しません
(?<=\n)=(.+)=(?=\n)
ほとんど機能しますが、最初または最後の行のインスタンスと一致しません
(?<!.)=(.+)=(?!.)
=
たとえば、 で始まり で終わるすべての行に実際に一致するように見える唯一のものですが、 $1 には置換文字列と元の文字列の両方が含まれています。
content = content.replaceAll("(?<=(\n|^))=(.+)=(?=(\n|$))", "<size:large>$2</size:large>");
実際にすべきことをしているように見える唯一の答えです。