2016-12-13 5 views
-1
String s2 = "K000"; 
Pattern p2 = Pattern.compile("/^.*([A-Z])/"); 
Matcher m2 = p2.matcher(s2); 

if (m2.find()) {  
    int pos2 = m2.end(); 
    a2 = s2.substring(0,pos2); 
    n2 = s2.substring(pos2); 
} 

私はa2が値「000」が割り当てられる値「K」とn2が割り当てられることを期待するだろうが、m2.find()はtrueと評価されたことがありません決して処理されません。私はオンライン正規表現テスターで正規表現パターンを二重にチェックし、この文字列とこのパターンでは一致としてKを返します。私がここで間違って何をしているのか?正規表現パターン/マッチャーと問題

最終的には、最後の議院アルファからn2の後に出現するa2と小文字、数字、特殊文字の最後の議事録アルファベットまで、最初からs2を割り当てることができなければなりません。

ご協力いただければ幸いです。

+1

が '/'を取り除きます。 – Marvin

+0

「Pattern.compile( "^。*([A-Z])"); ' – teppic

+0

Java、javascript、同じものは使用しないで、javascriptの正規表現区切り文字を省略します。 ;-P私が間違っていたことを選んでくれてありがとう。私は時間のように見えるために頭を叩いています。 –

答えて

0

正規表現から/を削除すると動作します。

だからあなたの最終的な正規表現は^.*([A-Z])になり、次のようにPatternオブジェクトが作成されます。これはあなたの望ましい結果が得られます

Pattern p2 = Pattern.compile("^.*([A-Z])"); 

+0

本当にあります! –

+0

@Chad正規表現で問題が発生した場合は、http://regexr.com/を試すことができます。それは非常に便利です。 – SachinSarawgi

1

/はJavascriptの正規表現デリミタですが、Javaでは使用しません。おそらくJavascript正規表現テスターを使用しました。あなたも、もう少し簡単なようで、他のパターン、使用することができます

See this example:

public static void main(String[] args) { 
    String s2 = "K000"; 
    String a2 = ""; 
    String n2 = ""; 

    Pattern p2 = Pattern.compile("^.*([A-Z])"); 
    Matcher m2 = p2.matcher(s2); 
    if (m2.find()) { 
     int pos2 = m2.end(); 
     a2 = s2.substring(0, pos2); 
     n2 = s2.substring(pos2); 
    } 

    System.out.println(a2); // K 
    System.out.println(n2); // 000 
} 

ノート(とすることができますマッチャーはあなたのために仕事をします)。

See this example:

public static void main(String[] args) { 
    String s2 = "K000"; 
    String a2 = ""; 
    String n2 = ""; 

    Pattern p2 = Pattern.compile("([A-Z]+)(.+)"); 
    Matcher m2 = p2.matcher(s2); 
    if (m2.matches()) { 
     a2 = m2.group(1); 
     n2 = m2.group(2); 
    } 

    System.out.println(a2); // K 
    System.out.println(n2); // 000 
} 

(あなたは、少なくとも一つの文字を必要としない場合*+を置き換える)