如何在regex中为Java String使用开始和结束标记?

noa*_*ahy 9 java regex string android

为什么以下内容不会在Android中更改我的文字?

String content = "test\n=test=\ntest";
content = content.replaceAll("^=(.+)=$", "<size:large>$1</size:large>")
Run Code Online (Sandbox Code Playgroud)

它返回原始值而没有任何更改.我希望它来代替中间=test=<size:large>test</size:large>

我在这里错过了什么?

编辑:好的,我理解为什么^$不工作.关键是我需要在行的开头和结尾匹配文本的东西,例如只包含"= some text ="的行.由于以下原因,大多数答案都不充分:

=(.+)=与行结尾没有任何关系,因此匹配任何=不是并排的行中的两行.

.*=(.+)=.* 匹配整行,但与前一个问题相同

\n=(.+)=\n越接近,但不会连续匹配两行(例如test\n=test=\n=test=\ntest)它也不会匹配第一行或最后一行的实例

(?<=\n)=(.+)=(?=\n) 几乎可以工作,但再次与第一行或最后一行的实例不匹配

(?<!.)=(.+)=(?!.)例如,唯一似乎实际匹配开始和结束的每一行的唯一一个=,但$ 1包含替换和原始字符串.

content = content.replaceAll("(?<=(\n|^))=(.+)=(?=(\n|$))", "<size:large>$2</size:large>"); 是唯一真正做到应有的答案.

Ala*_*ore 10

如果您打开多线模式,您的原始正则表达式工作正常,使用(?m):

content = content.replaceAll("(?m)^=(.+)=$", "<size:large>$1</size:large>");
Run Code Online (Sandbox Code Playgroud)

现在^$确实匹配的行边界.