2016-04-07 8 views
1

他のプラットフォームでは一致していない、私は成功しません、別の正規表現フラグを試してみました。私はこのstringで試合を見つけようとしている正規表現パターンは、Androidに加工へが、私はどこにでも解決策を見てきた

private static String LAST_LOG = "/.*?Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)/"; 

は、私は、次の正規表現パターンを持っています。

あなたが見ることができるように、それが試合を見つけて、7グループ(月、日、年、時、分、秒、タイムゾーン)内のデータをキャプチャしています。

問題は、私は、私は、文字列をテストしてみた、それは私が探している部分を含んでいない、まったく試合が届かないということですので、私は動作しないと、このため、他の理由を見つけることができませんAndroidで

m = getMatcher(content,LAST_LOG); 
    if(m.find()) { 
     Log.e("Month",m.group(1)); 
     Log.e("Day",m.group(2)); 
     Log.e("Year",m.group(3)); 
     Log.e("Hour",m.group(4)); 
     Log.e("Minute",m.group(5)); 
     Log.e("Second",m.group(6)); 
     Log.e("Timezone",m.group(7)); 
    } 
private static Matcher getMatcher(String str, String regex){ 
    Pattern pattern = Pattern.compile(regex); 
    return pattern.matcher(str); 
} 

そして、これは私のトラブルを引き起こしている唯一の正規表現ではありませんが、私は現在作業している他の人を持っていますが、単純な修正は、彼らも他のプラットフォーム(およびオンライン正規表現テスター)、彼らが正常に動作に考え、失敗します。

は、私はPythonスクリプトで同じ正規表現を持っており、それは何の問題もなく働いています:

regex_last = r'.*?Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)' 
m = re.search(regex_last,content.decode()) 
if m: 
    print(m.group(1)) 
    print(m.group(2)) 
    print(m.group(3)) 
    print(m.group(4)) 
    print(m.group(5)) 
    print(m.group(6)) 
    print(m.group(7)) 
else: 
    print('No match') 

出力:

Apr 
07 
2016 
17 
33 
52 
CEST 

私は以来、HTMLパーサに切り替えるには、この近くだけど、私はすでにPythonとAndroidの両方で正規表現を使っていましたが、正規表現を使うとプラットフォーム間の切り替えが簡単になると思ったので、私はそれらを使うことにしました。

+2

パターンの開始時と終了時に '' /、正規表現の区切り文字を削除します。 ICU正規表現はそれらを必要とせず、リテラルとして扱われます。最後のログイン:。*?td。*?td。*?([A-Za-z] +)。* ?;([0-9] +)。*? ; [(0-9)+)。*?((0-9)+):([0-9] +)。 '正規表現文字列として –

+0

が希望XPathクエリとして、一定になると、他のすべての言語間で変化するであろう、あなたの最後の文がWiktorStribiż[email protected]何の意味 –

+0

を行うものではありません:おかげで、それは私がやったことだ、私は同じ示唆ローレルの答えを受け入れました! – Galarzaa90

答えて

1

あなたは、開始と終了から/を削除する必要があります。私も.*?を最初から削除しますが、それは何の目的も果たしませんが遅くなります。

private static String LAST_LOG = "Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)";

+0

私はいつもそう簡単な解決策を持った質問を投稿しないように努力しています。だから、基本的には、私の正規表現の残りの部分は、正規表現の残りの部分を一致させるように、 '/'で始まり、 '/'で作業していたのは本当に幸運でした。それらをすべてのパターンから削除し、 '。*? 'を削除しました。まだ正規表現を学んで、ありがとう! – Galarzaa90

関連する問題