2015-10-05 103 views
0

我有一個以下json字符串,我必須過濾以獲得所謂的原始語句。正則表達式在字符串(s)內查找/包圍字符串Pattern.matches()== false

{ 「訂閱」:[ 「消息」, 「句子」, 「ANYTEXTWITHANYLENGTHHEREINCLUDINGNUMBERSDOTS; \ r \ n \」]}

jsonstring的反序列化不允許!

我做了篩選具有以下regular expression搜索文本:

((?<=\{\"subscribe\":\[\"message\",\"sentence\",")(.*)(?=;)) 

或(因爲它在Java代碼進行轉義):

String pattern = "(?<=\\{\"subscribe\":\\[\"message\",\"sentence\",\")(.*)(?=;)"; 

這是工作完美,如果我使用Matcher.find()並在while聲明中重複:

while (_regexMatcher.find()) { 
    matches.add(_regexMatcher.group()); //Add to List<String> 
} 

不幸的是,整個代碼是由我們的教授給出的。他做了環繞整個代碼:

if (Pattern.matches(pattern, json)) { 
    ... 
} 

由於Pattern.matches()使用與^模式在結束整個模式和$的beginnen,所以它不會找到任何匹配。
是否有另一種方法獲得ANYTEXTWITHANYLENGTHHEREUDNNMBUMBERSDOTS因此Pattern.matches()返回true?

+1

是JSON故意還是錯字? – nafas

+0

如果除了期望的字符串之外,您始終確定您的僞'JSON'的其餘部分的格式,那麼似乎最簡單的解決方案可能涉及使用'.split(「/」「)'和/或'.split(「,」)' –

回答

1

你可以嘗試一下,就立即停止匹配:

[\s\S]*(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)[\s\S]* 

[\s\S]*會匹配前後任何內容,所以整個字符串將會匹配,但只有在內部會有(?<=\{"subscribe":\["message","sentence",")(.*)(?=;)

+0

謝謝,正是我在找的東西。也許不是最優雅的解決方案,但它肯定可行:-) – jAC

0

只需添加。*?在你的正則表達式前面。它會勉強匹配(通過與貪婪的反對。*),這意味着它達到你之前的JSON模式,它應該工作作爲先前

相關問題