【发布时间】:2012-04-05 14:36:26
【问题描述】:
如果后面没有'#',我想替换字符'&'。例如,在这个字符串 "& hello &# world!" 中,我只想选择第一个 '&'。
到目前为止,我想出了这个正则表达式:
&[^#]
但是,这会选择 2 个字符,而我只想选择 & 字符。
RegExp 大师的任何帮助将不胜感激。
顺便说一句。这可能很重要:我想在 java replaceAll() 中使用它。
非常感谢, 达摩
【问题讨论】:
如果后面没有'#',我想替换字符'&'。例如,在这个字符串 "& hello &# world!" 中,我只想选择第一个 '&'。
到目前为止,我想出了这个正则表达式:
&[^#]
但是,这会选择 2 个字符,而我只想选择 & 字符。
RegExp 大师的任何帮助将不胜感激。
顺便说一句。这可能很重要:我想在 java replaceAll() 中使用它。
非常感谢, 达摩
【问题讨论】:
使用负前瞻:
System.out.println("& hello &# world!&".replaceAll("&(?!#)", "&"));
打印:
& hello &# world!&
【讨论】:
String s = "&$ &# &s &";
String r = s.replaceAll("&([^#])|(&$)", "&$1");
System.out.println("r = " + r);
打印:
r = &$ &# &s &
【讨论】:
您需要的是negative lookahead。考虑这个简单的代码:
String str = "& &$ &# &s &#";
str = str.replaceAll("&(?!#)", "&");
// assigns: & &$ &# &s &#
这基本上意味着如果后面没有 #,则替换&。
【讨论】:
【讨论】:
我认为Lookaround 在这里适用:&(?!#)
【讨论】:
【讨论】:
你需要做一个look ahead
虽然没有在java中测试过
【讨论】: