簡體   English   中英

Java 正則表達式匹配堆棧溢出

[英]Java regex match stack overflow

Pattern eqPattern = Pattern.compile("(.*?)([a-z0-9\\_\\.]*) eq \"(((\\\\\")|[^\"])*)\"([\\s]*.*)", Pattern.CASE_INSENSITIVE);

這是我的正則表達式。 當我嘗試匹配一個長字符串時,我得到了堆棧溢出。 該模式將匹配 column1 eq "abc" 和 column ne "abc" 之類的內容; (\\\")|[^\"]): to skip " in inside ""。我想問一下如何重寫這個以防止堆棧溢出。

最好的方法是從正則表達式中刪除交替。
可以這樣做,它使用展開的循環來代替:

"(.*?)([\\w.]*) eq \"([^\"\\\\]*(?:\\\\[\\S\\s][^\"\\\\]*)*)\"(\\s*.*)"

原始和擴展

 ( .*? )                       # (1)
 ( [\w.]* )                    # (2)
 [ ] eq [ ] 
 "
 (                             # (3 start)
      [^"\\]* 
      (?:

           \\ [\S\s] 
           [^"\\]* 
      )*
 )                             # (3 end)
 "
 ( \s* .* )                    # (4)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM