0
package xmlchars;

import java.util.regex.Pattern;

public class TestRegex {

public static final String SPECIAL_CHARACTERS = "(?i)^[^a-z_]|[^a-z0-9-_.]";


public static void main(String[] args) {
    // TODO Auto-generated method stub
    String name = "#1998St #";  
    Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS);      
    System.out.println(pattern.matcher(name).replaceAll(""));//gives wrong output 1998St            
}

}

基本的に私が達成しようとしているのは

  1. az と _ だけで始まる文字列
  2. az 0-9 _ - を含む文字列。開始後
  3. 文字列全体で大文字と小文字を区別しない
4

4 に答える 4

1

あなたは言えた:

... SPECIAL_CHARACTERS = "^[a-z_][a-z0-9_]+$";

次のように言ってパターンを定義します。

Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);
于 2013-11-09T08:49:31.890 に答える
0

ほら、動作証明付きです。

package xmlchars;

import java.util.regex.Pattern;

public class TestRegex {

public static final String SPECIAL_CHARACTERS = "^[^a-z_]*|[^a-z_0-9-._]";  

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String name = " # !`~!@#$%^&*()-_=+{}[];:',<>/?19.- 98Cc#19 #/9_-8-.";      
    Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);        
    System.out.println(pattern.matcher(name).replaceAll(""));   // output _19.-98Cc199_-8-.
 }

}
于 2013-11-09T14:36:37.557 に答える
0

Stringでパターンに一致しないものを識別しようとしていると仮定します。あなたが持っているものはほとんど正しいように見えます。正規表現は次のように機能するようです。

 "(?i)^([^a-z_]|[^a-z0-9-_.])"

これは、これら 2 つのグループのいずれかが の先頭に表示される場合にのみ一致しStringます。代わりに、これを試してください:

"(?i)(^[^a-z_])|[^a-z0-9-_.]"

さらに短縮するには、 と同じ定義済みの文字クラス を使用できます。これにより、大文字と小文字を区別する必要さえなくなります。\\W[^a-zA-Z_0-9]

"(^\\W)|[\\W-.]"

String呼ばれるを指定するとstrstr.replaceAll("(^\\W)|[\\W-.]","");すべての無効な文字が削除されます。


文字列をテストします。

class RegexTest
{
    public static void main (String[] args)
    {
        String str = "#1998St #";
        str = str.replaceAll("(^\\W)|[\\W-.]","");
        System.out.println(str);
    }
}

出力:

1998年

于 2013-11-09T18:54:13.700 に答える
0

私は正規表現を解読することができました。既存のものへの簡単な変更。

 "^[^a-z_]*|[^a-z_0-9-._]"
于 2013-11-09T14:29:19.070 に答える