[英]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.