Java正则表达式跳过匹配

Java正则表达式跳过匹配,java,regex,pcre,Java,Regex,Pcre,我需要捕获文本中的所有#字符,除了那些被#[…]包围的字符。 我编写了PCRE版本(),它工作得很好,但是Java不支持(*SKIP)(*FAIL) 这个正则表达式有Java等价物吗?谢谢。这使用了一个小技巧来匹配您不想要的#s,然后匹配捕获组中的其余部分: \[.*?\]\[(#+) 您将需要提取第一个捕获组以获得所需的s 如果您想捕获不是自定义方括号的一部分或在自定义方括号中的每个单独的#,您可以从捕获组中删除+,如下所示: \[.*?\]\[(代码) 此外,如果可以使用类似于#[text

我需要捕获文本中的所有
#
字符,除了那些被
#[…]包围的字符。
我编写了PCRE版本(),它工作得很好,但是Java不支持(*SKIP)(*FAIL)


这个正则表达式有Java等价物吗?谢谢。

这使用了一个小技巧来匹配您不想要的
#
s,然后匹配捕获组中的其余部分:

\[.*?\]\[(#+)

您将需要提取第一个捕获组以获得所需的
s

如果您想捕获不是自定义方括号的一部分或在自定义方括号中的每个单独的
#
,您可以从捕获组中删除
+
,如下所示:

\[.*?\]\[(代码)

此外,如果可以使用类似于
#[text]#
的文本,则可能需要如下查找:

\[.*?!\]\[)

如果您可以使用
\K
(但我不认为您可以在Java中使用),那么使用以下内容会更简单,因为这样您就不必担心捕获组了:


\[.*?\]\K |#

举一个你想匹配的字符串的例子。@jamesjelo4kul:我的问题中有一个链接。我添加了一些文字以增加想象力。@anubhava:只要捕获,然后我就可以用Java替换它…@StefanH-你想用什么替换#s?最后一个解决方案很好,但我不能用Java使用
\K
。第一个行得通,谢谢。如果括号的格式不正确,它怎么会失败呢?合法的表达式应该是
#[这个是#ok#]
@MaxZoom-好的,但是看看当我从右括号中创建属性时会发生什么:。好的,我看到了,自从我看到它之后,OP post文本发生了变化。
 #\[.*#\](*SKIP)(*FAIL)|#