日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java过滤特殊字符的正则表达式

發布時間:2025/6/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java过滤特殊字符的正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在網上找了好久也沒找到個合適的正則表達式以過濾特殊字符;自己學習了下,寫了兩個,實現要求。?
Java代碼??
  • //?過濾特殊字符??
  • ????public???static???String?StringFilter(String???str)???throws???PatternSyntaxException???{?????
  • ????????????????//?只允許字母和數字???????
  • ????????????????//?String???regEx??=??"[^a-zA-Z0-9]";?????????????????????
  • ???????????????????//?清除掉所有特殊字符??
  • ??????????String?regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";??
  • ??????????Pattern???p???=???Pattern.compile(regEx);?????
  • ??????????Matcher???m???=???p.matcher(str);?????
  • ??????????return???m.replaceAll("").trim();?????
  • ??????????}?????
  • ????@Test?????????
  • ????public????void???testStringFilter()???throws???PatternSyntaxException???{?????
  • ??????????String???str???=???"*adCVs*34_a?_09_b5*[/435^*&城池()^$$&*).{}+.|.)%%*(*.中國}34{45[]12.fd'*&999下面是中文的字符¥……{}【】。,;’“‘”?";?????
  • ??????????System.out.println(str);?????
  • ??????????System.out.println(StringFilter(str));?????
  • ??????????}????


  • 用的是JUnit測試的,當然你可以改成main?

    Java正則表達式學習: ?
    因為正則表達式是一個很龐雜的體系,此例僅舉些入門的概念,更多的請參閱相關書籍及自行摸索。?

    \\ 反斜杠?
    \t 間隔 ('\u0009')?
    \n 換行 ('\u000A')?
    \r 回車 ('\u000D')?
    \d 數字 等價于[0-9]?
    \D 非數字 等價于[^0-9]?
    \s 空白符號 [\t\n\x0B\f\r]?
    \S 非空白符號 [^\t\n\x0B\f\r]?
    \w 單獨字符 [a-zA-Z_0-9]?
    \W 非單獨字符 [^a-zA-Z_0-9]?
    \f 換頁符?
    \e Escape?
    \b 一個單詞的邊界?
    \B 一個非單詞的邊界?
    \G 前一個匹配的結束?

    ^為限制開頭?
    ^java???? 條件限制為以Java為開頭字符?
    $為限制結尾?
    java$???? 條件限制為以java為結尾字符?
    . 條件限制除\n以外任意一個單獨字符?
    java..???? 條件限制為java后除換行外任意兩個字符?


    加入特定限制條件「[]」?
    [a-z]???? 條件限制在小寫a to z范圍中一個字符?
    [A-Z]???? 條件限制在大寫A to Z范圍中一個字符?
    [a-zA-Z] 條件限制在小寫a to z或大寫A to Z范圍中一個字符?
    [0-9]???? 條件限制在小寫0 to 9范圍中一個字符?
    [0-9a-z] 條件限制在小寫0 to 9或a to z范圍中一個字符?
    [0-9[a-z]] 條件限制在小寫0 to 9或a to z范圍中一個字符(交集)?

    []中加入^后加再次限制條件「[^]」?
    [^a-z]???? 條件限制在非小寫a to z范圍中一個字符?
    [^A-Z]???? 條件限制在非大寫A to Z范圍中一個字符?
    [^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z范圍中一個字符?
    [^0-9]???? 條件限制在非小寫0 to 9范圍中一個字符?
    [^0-9a-z] 條件限制在非小寫0 to 9或a to z范圍中一個字符?
    [^0-9[a-z]] 條件限制在非小寫0 to 9或a to z范圍中一個字符(交集)?

    在限制條件為特定字符出現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,}???? JJJ,JJJJ,JJJJJ,???(3次以上J并存)?
    文字個以上,b個以下「{a,b}」?
    J{3,5}???? JJJ或JJJJ或JJJJJ?
    兩者取一「|」?
    J|A???? J或A?
    Java|Hello???? Java或Hello?

    「()」中規定一個組合類型?
    比如,我查詢<a href=\"index.html\">index</a>中<a href></a>間的數據,可寫作<a.*href=\".*\">(.+?)</a>?

    在使用Pattern.compile函數時,可以加入控制正則表達式的匹配行為的參數:?
    Pattern Pattern.compile(String regex, int flag)?

    flag的取值范圍如下:?
    Pattern.CANON_EQ???? 當且僅當兩個字符的"正規分解(canonical decomposition)"都完全相同的情況下,才認定匹配。比如用了這個標志之后,表達式"a\u030A"會匹配"?"。默認情況下,不考慮"規 范相等性(canonical equivalence)"。?
    Pattern.CASE_INSENSITIVE(?i)???? 默認情況下,大小寫不明感的匹配只適用于US-ASCII字符集。這個標志能讓表達式忽略大小寫進行匹配。要想對Unicode字符進行大小不明感的匹 配,只要將UNICODE_CASE與這個標志合起來就行了。?
    Pattern.COMMENTS(?x)???? 在這種模式下,匹配時會忽略(正則表達式里的)空格字符(譯者注:不是指表達式里的"\\s",而是指表達式里的空格,tab,回車之類)。注釋從#開始,一直到這行結束。可以通過嵌入式的標志來啟用Unix行模式。?
    Pattern.DOTALL(?s)???? 在這種模式下,表達式'.'可以匹配任意字符,包括表示一行的結束符。默認情況下,表達式'.'不匹配行的結束符。?
    Pattern.MULTILINE?
    (?m)???? 在這種模式下,'^'和'$'分別匹配一行的開始和結束。此外,'^'仍然匹配字符串的開始,'$'也匹配字符串的結束。默認情況下,這兩個表達式僅僅匹配字符串的開始和結束。?
    Pattern.UNICODE_CASE?
    (?u)???? 在這個模式下,如果你還啟用了CASE_INSENSITIVE標志,那么它會對Unicode字符進行大小寫不明感的匹配。默認情況下,大小寫不敏感的匹配只適用于US-ASCII字符集。?
    Pattern.UNIX_LINES(?d)???? 在這個模式下,只有'\n'才被認作一行的中止,并且與'.','^',以及'$'進行匹配。?


    拋開空泛的概念,下面寫出幾個簡單的Java正則用例:?

    ◆比如,在字符串包含驗證時?

    //查找以Java開頭,任意結尾的字符串?
    Pattern pattern = Pattern.compile("^Java.*");?
    Matcher matcher = pattern.matcher("Java不是人");?
    boolean b= matcher.matches();?
    //當條件滿足時,將返回true,否則返回false?
    System.out.println(b);?


    ◆以多條件分割字符串時?
    Pattern pattern = Pattern.compile("[, |]+");?
    String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");?
    for (int i=0;i<strs.length;i++) {?
    ??? System.out.println(strs[i]);?
    }?

    ◆文字替換(首次出現字符)?
    Pattern pattern = Pattern.compile("正則表達式");?
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");?
    //替換第一個符合正則的數據?
    System.out.println(matcher.replaceFirst("Java"));?

    ◆文字替換(全部)?
    Pattern pattern = Pattern.compile("正則表達式");?
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");?
    //替換第一個符合正則的數據?
    System.out.println(matcher.replaceAll("Java"));?


    ◆文字替換(置換字符)?
    Pattern pattern = Pattern.compile("正則表達式");?
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World ");?
    StringBuffer sbr = new StringBuffer();?
    while (matcher.find()) {?
    ??? matcher.appendReplacement(sbr, "Java");?
    }?
    matcher.appendTail(sbr);?
    System.out.println(sbr.toString());?

    ◆驗證是否為郵箱地址?

    String str="ceponline@yahoo.com.cn";?
    Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);?
    Matcher matcher = pattern.matcher(str);?
    System.out.println(matcher.matches());?

    ◆去除html標記?
    Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);?
    Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");?
    String string = matcher.replaceAll("");?
    System.out.println(string);?

    ◆查找html中對應條件字符串?
    Pattern pattern = Pattern.compile("href=\"(.+?)\"");?
    Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");?
    if(matcher.find())?
    System.out.println(matcher.group(1));?
    }?

    ◆截取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("\r\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) {?
    ??????????? String temp=sourceString;????
    ??????????? for(int i=0;i<object.length;i++){?
    ????????????????????? String[] result=(String[])object[i];?
    ?????????????? Pattern??? pattern = Pattern.compile(result[0]);?
    ?????????????? Matcher matcher = pattern.matcher(temp);?
    ?????????????? temp=matcher.replaceAll(result[1]);?
    ??????????? }?
    ??????????? return temp;?
    }?


    ◆以正則條件查詢指定目錄下文件?

    //用于緩存文件列表?
    ??????? private ArrayList files = new ArrayList();?
    ??????? //用于承載文件路徑?
    ??????? private String _path;?
    ??????? //用于承載未合并的正則公式?
    ??????? private String _regexp;?
    ????????
    ??????? class MyFileFilter implements FileFilter {?

    ??????????? /**?
    ?????????????? * 匹配文件名稱?
    ?????????????? */?
    ??????????? public boolean accept(File file) {?
    ??????????????? try {?
    ????????????????? Pattern pattern = Pattern.compile(_regexp);?
    ????????????????? Matcher match = pattern.matcher(file.getName());????????????????
    ????????????????? return match.matches();?
    ??????????????? } catch (Exception e) {?
    ????????????????? return true;?
    ??????????????? }?
    ??????????? }?
    ??????????? }?
    ????????
    ??????? /**?
    ??????? * 解析輸入流?
    ??????? * @param inputs?
    ??????? */?
    ??????? FilesAnalyze (String path,String regexp){?
    ??????????? getFileName(path,regexp);?
    ??????? }?
    ????????
    ??????? /**?
    ??????? * 分析文件名并加入files?
    ??????? * @param input?
    ??????? */?
    ??????? private void getFileName(String path,String regexp) {?
    ??????????? //目錄?
    ????????????? _path=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]);?
    ??????????? }?
    ??????????? return;?
    ??????????? }?
    ????
    ??????? /**?
    ???????? * 顯示輸出信息?
    ???????? * @param out?
    ???????? */?
    ??????? public void print (PrintStream out) {?
    ??????????? Iterator elements = files.iterator();?
    ??????????? while (elements.hasNext()) {?
    ??????????????? File file=(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|.]*");?
    ??????? }?

    總結

    以上是生活随笔為你收集整理的Java过滤特殊字符的正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。