1. ホーム
  2. アンドロイド

EditText フィルタリングの特殊文字列(正規表現の例)

2022-02-28 01:52:19

<スパン <スパン <スパン Java正規表現学習。



正規表現は非常に複雑なシステムであるため、この例では入門的な概念しか説明していません。 







\\\ 쇼쇼쇼 



\୧⃛(๑⃙⃘'ᴗ'๑⃙⃘) 



\୧⃛(๑⃙⃘'ᴗ'๑⃙⃘) 



\Ȃ キャリッジリターン('ⅷωⅷ) 



\⑭数値 [0-9]に相当する。 



\⑭非数字 [^0-9] に相当します。 



\s Blank symbol [\tn︓x0B↩fr]. 



\Ȃ 非ブランク・シンボル 



\Ȃ 1文字[a-zA-Z_0-9]です。 



\Ȃ 非独立文字[^a-zA-Z_0-9]である。 



\Ÿ ページブレーク文字 



\エスケープ 



\単語境界 



\⑭非語彙的境界 



\⑭ 前試合の終了 







^ 制限開始のため 



^java条件はJavaで始まる文字に制限する。 



で終わるように制限されています。 



java$ 条件付きで、java の終端文字で終わるように制限されています。 



. 条件付きで⾊字以外の⼀⽂字に制限する。 



java...     javaの後に改行以外の任意の2文字がある場合の条件付き制限 











特定の制約 "[]" を追加します。 



a-z]条件では、小文字のaからzの範囲で1文字に制限されます。 



[A-Z] 大文字のAからZの範囲で1文字に限定される条件 



[a-zA-Z] 小文字のaからz、または大文字のAからZの範囲で1文字に限定された条件です。 



[0-9] 小文字の0から9までの1文字に限定されます。 



[0-9a-z] 小文字の0から9またはaからzの範囲で1文字に限定された条件です。 



[0-9[a-z]]の場合 条件は、小文字の0〜9またはa〜zの範囲で1文字に限定(交差点)。 







に^を追加し、さらに別の制限 "[^]"を追加します。 



^a-z] の条件は、小文字でない a から z までの範囲の1文字に制限するものです。 



[^A-Z] 大文字でないAからZの範囲にある1文字に限定する条件 



[^a-zA-Z] 小文字でないaからz、または大文字のAからZの範囲で1文字に限定した条件です。 



[0-9] 小文字でない0から9までの1文字に限定されます。 



[^0-9a-z] 小文字でない0から9、またはaからzの範囲で1文字に限定された条件です。 



[^0-9[a-z] 小文字でない0〜9またはa〜zの範囲で1文字に限定された条件(交差点)。 







特定の文字が0回以上出現する場合は、"*"を使用することができます。 



J* 0個以上のJ 



. * 0文字以上の任意の文字 



J.*D J と D の間に 0 以上の任意の文字がある。 







特定の文字が1つ以上出現することを制限する場合は、"+"を使用することができます。 



J+ 1つ以上のJ 



. + 1文字以上の任意の文字 



J.+D JとDの間に1文字以上の任意の文字を入れる。 







特定の文字が0回以上または1回以上出現するという制約がある場合、"?" を使用することができます。 



JA?JまたはJAが表示されます 







文字 "{a}の連続した出現を指定された数に制限する。 



J{2} JJ 



J{3} JJJ 



テキストaが複数あり、"{a,}" 



j{3,} jjjjj,jjjj,jjjj,????????????????????????????????????????. (3回以上J共存) 



テキストの上、bの下 "{a,b}"。 



J{3,5} JJJまたはJJJJまたはJJJJ 



2つのうち1つを取る "|" 



J|A JまたはA 



Java|Hello JavaまたはHello 

"()"で組み合わせ型を指定します。

<スパン 例

例えば、<a href="index.html">index</a> の間のデータを問い合わせる場合、 <a.*href=






Pattern.compile関数を使用する場合、正規表現のマッチング動作を制御するパラメータを追加することができます。 



パターン Pattern.compile(String regex, int flag) 







このフラグは、以下の範囲の値をとる。 



Pattern.CANON_EQ 2つの文字の "正準分解 (canonical decomposition) "が同一の場合にのみ、マッチが判定されます。例えば、このフラグを使用した後、 "au030A" という式は "? " にマッチする。デフォルトでは、quot;正準同等性は考慮されません。 



Pattern.CASE_INSENSITIVE(?i) デフォルトでは、大文字小文字を区別しないマッチングはUS-ASCII文字セットに対してのみ適用されます。このフラグは、大文字小文字を無視したマッチングを可能にします。Unicode文字に対して大文字小文字を区別しないマッチングを行うには、UNICODE_CASEとこのフラグを組み合わせればよいのです。 



COMMENTS(?x) このモードでは、(正規表現における)スペースを無視したマッチングが行われます。コメントは#で始まり、行末まで続きます。埋め込みフラグで有効にすることができます。
<スパン ユニックス
ラインモードです。 



Pattern.DOTALL(?s) このパターンでは、'.'という表現は、行末を含む任意の文字にマッチさせることができます。デフォルトでは、'.'式は行末にマッチしません。



パターン.MULTILINE 



(?m) このパターンでは、'^' と '$' はそれぞれ行頭と行末にマッチします。さらに、'^' はやはり文字列の先頭にマッチし、'$' は文字列の最後にもマッチする。デフォルトでは、これら二つの式は文字列の先頭と末尾にのみマッチします。 



パターン.UNICODE_CASE 



(?u) このパターンでは、CASE_INSENSITIVE フラグも有効にすると、Unicode 文字に対して大文字と小文字を区別しないマッチングが行われるようになります。デフォルトでは、大文字と小文字を区別しないマッチングは US-ASCII 文字セットに対してのみ有効です。 



Pattern.UNIX_LINES(?d) このパターンでは、' \n' だけが行の中断として認識され、'.', '^', '$' と共に使用されます。 











漠然とした概念はさておき、簡単なJavaの常用例をいくつか紹介します。 







例えば、文字列を含むかどうかの検証の場合 







//Javaで始まり、何かで終わる文字列を検索します。 



パターン pattern = Pattern.compile("^Java.*"); 



Matcher matcher = pattern.matcher("Java is not a person")。 



boolean b= matcher.matches()。 



//条件を満たした場合はtrueを、満たさない場合はfalseを返します。 



System.out.println(b)を実行します。 











複数の条件を指定して文字列を分割する場合 



パターン pattern = Pattern.compile("[, |]+"); 



String[] strs = pattern.split("Java Hello World Java,Hello,,World|。
")。 



for (int i=0;i<strs.length;i++){. 



    System.out.println(strs[i])を実行します。 











文字置換(初出文字数) 



パターン pattern = Pattern.compile("regular expression")。 



Matcher matcher = pattern.matcher("Regular Expression Hello World,Regular Expression Hello World")。 



//正規表現にマッチする最初のデータを置き換える 



System.out.println(matcher.replaceFirst("Java"))); 







テキスト置換(全て) 



パターン pattern = Pattern.compile("regular expression")。 



Matcher matcher = pattern.matcher("Regular Expression Hello World,Regular Expression Hello World")。 



//正規表現にマッチする最初のデータを置き換える 



System.out.println(matcher.replaceAll("Java"))); 











テキスト置換(文字の置き換え) 



パターン pattern = Pattern.compile("regular expression")。 



Matcher matcher = pattern.matcher("Regular Expression Hello World,Regular Expression Hello World ")。 



StringBuffer sbr = new StringBuffer(); 



while (matcher.find()) { 



    matcher.appendReplacement(sbr, "Java") を実行します。 







matcher.appendTail(sbr)を実行します。 



System.out.println(sbr.toString()); 







メールアドレスかどうかの確認 







文字列str="[email protected]"。 



Pattern pattern = Pattern.compile("[\pathy-]+@([\pathy-]+


Matcher matcher = pattern.matcher(str); 



System.out.println(matcher.matches())。 







htmlタグを削除する 



パターン pattern = Pattern.compile("<. +? >", Pattern.DOTALL); 



Matcher matcher = pattern.matcher("<a href="index.html">homepage</a>") とする。 



文字列 string = matcher.replaceAll(""); 



System.out.println(string)を実行します。 







html 内の対応する条件文字列を検索する。 



Pattern pattern = Pattern.compile("href=Cache"(. +?) \""); 



Matcher matcher = pattern.matcher("<a href="index.html">homepage</a>"); 



if(matcher.find()) 



System.out.println(matcher.group(1)); 











◆Intercept http://地址 



//インターセプトURL 



Pattern pattern = Pattern.compile("(http://|https://){1}[\w;) 



Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf"); 



StringBuffer buffer = new StringBuffer(); 



while(matcher.find()){。              



    buffer.append(matcher.group())を実行します。        



    buffer.append("\n");              



System.out.println(buffer.toString()); 











指定された{}内のテキストを置き換えます。 







String str = "現在のJavaの歴史は{0}年~{1}年です"。 



String[][] object = {new String[]{"\{0}}","1995"},new String[]{"\{1}}","2007"}} とする。 



System.out.println(replace(str,object)); 







public static String replace(final String sourceString,Object[] object) {... 



            文字列temp=sourceString;    



            for(int i=0;i<object.length;i++){ 



                      String[] result=(String[])object[i]です。 



               パターン pattern = Pattern.compile(result[0]); 



               Matcher matcher = pattern.matcher(temp); 



               temp=matcher.replaceAll(result[1]); 



            } 



            はtempを返します。 















指定されたディレクトリ内のファイルを正規の条件で問い合わせる ◆指定されたディレクトリ内のファイルを正規の条件で問い合わせる 







// ファイル一覧のキャッシュ用 



        private ArrayList files = new ArrayList(); 



        // ファイルパスのホストに使用される 



        private String _path; 



        // マージされていない正規表現を運ぶために使用されます。 



        private String _regexp; 







        class MyFileFilter implements FileFilter { (マイファイルフィルター) 







            /** 



               * ファイル名のマッチング 



               */ 



            public boolean accept(ファイル) { (ファイル) 



                トライ { 



                  Pattern pattern = Pattern.compile(_regexp); 



                  Matcher match = pattern.matcher(file.getName());                



                  return match.matches(); 



                } catch (Exception e) { 



                  はtrueを返します。 



                } 



            } 



            } 







        /** 



        * 入力ストリームのパース 



        * @param inputs 



        */ 



        FilesAnalyze (String path,String regexp){... 



            getFileName(path,regexp)とする。 



        } 







        /** 



        * ファイル名を解析し、ファイルを追加する 



        * @param input 



        */ 



        private void getFileName(String path,String regexp) {. 



            //ディレクトリ 



              _path=パス。 



              _regexp=regexp。 



            File directory = new File(_path); 



            File[] filesFile = directory.listFiles(new MyFileFilter())。 



            if (filesFile == null) return; 



            for (int j = 0; j < filesFile.length; j++) {. 



                files.add(filesFile[j])を実行します。 



            } 



            を返します。 



            } 







        /** 



         * 出力情報を表示する 



         * @param out 



         */ 



        public void print (PrintStream out) {. 



            Iterator elements = files.iterator(); 



            while (elements.hasNext()){。 



                ファイル file=(ファイル) elements.next(); 



                    out.println(file.getPath())を実行します。    



            } 



        } 







        public static void output(String path,String regexp) {... 







            FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp); 



            fileGroup1.print(System.out)を実行します。 



        } 







        public static void main (String[] args) { { { 



            output("C:\","[A-z|.] *")を実行します。 



        }




<スパン

public class EditTextFilter { <未定義



 // 特殊文字のフィルタリング



 public static String StringFilter(String str) throws PatternSyntaxException {... <未定義



  // 英字と数字のみ使用可能



  // String regEx = "[^a-zA-Z0-9]";



  // 特殊文字をすべて消去する



  String regEx = "[`~! @#$%^&*()+=|{}':;',\\[\\]. <>/? ~! @#$%......& amp;*()--+|{}[]'; :""'. ,,?] "。



  Pattern p = Pattern.compile(regEx)。



  Matcher m = p.matcher(str);



  return m.replaceAll("").trim();



 }

}