1

如果后面没有'#',我想替换字符'&'。例如,在这个字符串中"& hello &# world!",我只想选择第一个“&”。

到目前为止,我想出了这个正则表达式:

&[^#]

但是,这选择了 2 个字符,而我只想选择 & 字符。

RegExp 大师的任何帮助将不胜感激。


顺便提一句。这可能很重要:我想在 java replaceAll() 中使用它。

非常感谢,达摩

4

7 回答 7

3

使用负前瞻:

System.out.println("& hello &# world!&".replaceAll("&(?!#)", "&"));

印刷:

& hello &# world!&
于 2012-04-05T14:42:41.293 回答
2

你需要的是负前瞻。考虑这个简单的代码:

String str = "& &$ &# &s &#";
str = str.replaceAll("&(?!#)", "&");
// assigns: & &$ &# &s &#

&这基本上意味着如果没有后跟 则替换#

于 2012-04-05T14:47:02.733 回答
2
String s = "&$ &# &s &";
String r = s.replaceAll("&([^#])|(&$)", "&$1");
System.out.println("r = " + r);

印刷:

r = &$ &# &s &
于 2012-04-05T14:40:36.253 回答
1
  • You could replaceAll &# by @# or any other improbable char sequence.
  • Replace all & by what you want
  • and replace back all @# by &#
于 2012-04-05T14:40:03.197 回答
1

我认为Lookaround适用于此:&(?!#)

于 2012-04-05T14:42:43.837 回答
1

您可以使用负前瞻

&(?!#)

负前瞻结构是一对圆括号,左括号后跟一个问号和一个感叹号。在前瞻中,我们有简单的正则表达式#。

于 2012-04-05T14:42:46.410 回答
1

你需要向前看

虽然没有在java中测试过

于 2012-04-05T14:43:43.630 回答