[英]Is there a simple Java Regex (*SKIP)(*F) alternative?
我正在用 Java 编写程序,并且在使用正则表达式时遇到了一个小问题。 我想捕捉所有没有用引号括起来的东西。 我有一个正则表达式模式,就在这里<\/a>,但问题是,它不能在 Java 中使用。
我有另一个模式很接近,但不是我需要的,就在这里<\/a>。 它会找到前面或后面没有引号的所有内容。 它使用
(*SKIP)(*F)<\/code>技巧跳过
".*"<\/code>并找到其他任何东西(使用
[^\\W]<\/code> ),但正如我所说,它不能在 Java 中使用。
那个问题是,如果我有这样的事情:
Test1 "Hello World!" Test2<\/code>
Test1 "Hello World!" Test2<\/code> ,并将抓住
Test1<\/code> ,
Test2<\/code> , AND
World<\/code> 。
我不想得到
World<\/code> ,因为它在引号中。
我想知道的是,是否有可能做我想做的事,如果可以的话怎么做。
您必须匹配您想要避免的内容并使用捕获组来提取您想要的内容(我认为没有其他方法)<\/em> 。 一个方便的模式可以是:
(?:[^\w"]+|"[^"]*")*+(\w+)
这些动词是告诉正则表达式引擎(在本例中为 PCRE)您要丢弃这些匹配项的非常有用的方法。
Java 没有这些动词,但您可以在没有动词
(*SKIP)(*F)<\/code>的情况下在 java 上使用相同的方法,然后捕获您想要的内容......所以您可以使用:
".*"|([^\W]+)
or
".*"|(\w+)
不幸的是,我还不能对其他帖子发表评论,但如果有多组引号,Federico Piazza 的解决方案将会失败。 例如,如果您的文本如下:
String text = "test1 \"hello world!\" test2 \"foobar\" test3";
您希望引号之外的单词不包括尾随空格:
[^"\s]++((?=\s*"[^\s])|(?=\s*$)|(?=[^"]+\s+"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.