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