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)
现在^和$确实匹配的行边界.
| 归档时间: |
|
| 查看次数: |
6826 次 |
| 最近记录: |