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)
现在^
和$
确实匹配的行边界.