当前位置:   article > 正文

Android开发中正则表达式的应用_android 开发 正则表达式 pattern 用法

android 开发 正则表达式 pattern 用法

今天了解了一下正则表达式,记录一下它的一些基本用法。

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

一些简单常用的适配符号

String resourcePath = "/test/test1/test2/L_mzgp21gz.txt";

(1) \\    转义字符

(2)在限制条件为特定字符出现0次以上时,可以使用「*」

J*     0个以上J(以J开头)

.*     0个以上任意字符

J.*D   J与D之间0个以上任意字符

  1. String str3 = "test2.*txt";
  2. Pattern pattern = Pattern.compile(str3);
  3. Matcher matcher = pattern.matcher(resourcePath);
  4. if (matcher.find()) {
  5.     result = matcher.group();
  6. }

输出结果:test2/L_mzgp21gz.txt

(3)在限制条件为特定字符出现1次以上时,可以使用「+」
J+     1个以上J

.+     1个以上任意字符

J.+D     J与D之间1个以上任意字符

(4)「()」中规定一个组合类型

  1. String str1 = "(.*\\/)(.*)(\\.txt)";//取值的时候index分别是:1,2,3……(从1开始)
  2. Pattern pattern = Pattern.compile(str1);
  3. Matcher matcher = pattern.matcher(resourcePath);
  4. if (matcher.find()) {
  5.     result = matcher.group(2);
  6. }

输出结果:L_mzgp21gz

(5)在限制条件为特定字符出现有0或1次以上时,可以使用「?」

JA?     JA出现

  1. String resourcePath1 = "<a href=\"index.html\">index</a>";
  2. String str3 = "(.*<a.*>)(.+?)(<\\/a>)";
  3. Pattern pattern = Pattern.compile(str3);
  4. Matcher matcher = pattern.matcher(resourcePath1);
  5. if (matcher.find()) {
  6.     result = matcher.group(2);
  7. }

输出结果:index

表达式

可匹配

\d

任意一个数字,0~9 中的任意一个

\w

任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个

\s

包括空格、制表符、换页符等空白字符的其中任意一个

.

小数点可以匹配除了换行符(\n)以外的任意一个字符


最后附加一个正则工具类RegexUtil

  1. public final class RegexUtil {
  2. /**
  3. * 手机号码,中间4位星号替换
  4. *
  5. * @param phone 手机号
  6. * @return 星号替换的手机号
  7. */
  8. public static String phoneNoHide(String phone) {
  9. // 括号表示组,被替换的部分$n表示第n组的内容
  10. // 正则表达式中,替换字符串,括号的意思是分组,在replace()方法中,
  11. // 参数二中可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。
  12. // "(\d{3})\d{4}(\d{4})", "$1****$2"的这个意思就是用括号,
  13. // 分为(前3个数字)中间4个数字(最后4个数字)替换为(第一组数值,保持不变$1)(中间为*)(第二组数值,保持不变$2)
  14. return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
  15. }
  16. /**
  17. * 银行卡号,保留最后4位,其他星号替换
  18. *
  19. * @param cardId 卡号
  20. * @return 星号替换的银行卡号
  21. */
  22. public static String cardIdHide(String cardId) {
  23. return cardId.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1");
  24. }
  25. /**
  26. * 身份证号,中间10位星号替换
  27. *
  28. * @param id 身份证号
  29. * @return 星号替换的身份证号
  30. */
  31. public static String idHide(String id) {
  32. return id.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2");
  33. }
  34. /**
  35. * 是否为车牌号(沪A88888)
  36. *
  37. * @param vehicleNo 车牌号
  38. * @return 是否为车牌号
  39. */
  40. public static boolean checkVehicleNo(String vehicleNo) {
  41. Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$");
  42. return pattern.matcher(vehicleNo).find();
  43. }
  44. /**
  45. * 验证身份证号码
  46. *
  47. * @param idCard 居民身份证号码15位或18位,最后一位可能是数字或字母
  48. * @return 验证成功返回true,验证失败返回false
  49. */
  50. public static boolean checkIdCard(String idCard) {
  51. String regex = "[1-9]\\d{13,16}[a-zA-Z0-9]{1}";
  52. return Pattern.matches(regex, idCard);
  53. }
  54. /**
  55. * 验证手机号码(支持国际格式,+86135xxxx...(中国内地),+00852137xxxx...(中国香港))
  56. *
  57. * @param mobile 移动、联通、电信运营商的号码段
  58. * <p>移动的号段:134(0-8)、135、136、137、138、139、147(预计用于TD上网卡)
  59. * 、150、151、152、157(TD专用)、158、159、187(未启用)、188(TD专用)</p>
  60. * <p>联通的号段:130、131、132、155、156(世界风专用)、185(未启用)、186(3g)</p>
  61. * <p>电信的号段:133、153、180(未启用)、189</p>
  62. * @return 验证成功返回true,验证失败返回false
  63. */
  64. public static boolean checkMobile(String mobile) {
  65. String regex = "(\\+\\d+)?1[3458]\\d{9}$";
  66. return Pattern.matches(regex, mobile);
  67. }
  68. /**
  69. * 验证固定电话号码
  70. *
  71. * @param phone 电话号码,格式:国家(地区)电话代码 + 区号(城市代码) + 电话号码,如:+8602085588447
  72. * <p><b>国家(地区) 代码 :</b>标识电话号码的国家(地区)的标准国家(地区)代码。它包含从 0 到 9 的一位或多位数字,
  73. * 数字之后是空格分隔的国家(地区)代码。</p>
  74. * <p><b>区号(城市代码):</b>这可能包含一个或多个从 0 到 9 的数字,地区或城市代码放在圆括号——
  75. * 对不使用地区或城市代码的国家(地区),则省略该组件。</p>
  76. * <p><b>电话号码:</b>这包含从 0 到 9 的一个或多个数字 </p>
  77. * @return 验证成功返回true,验证失败返回false
  78. */
  79. public static boolean checkPhone(String phone) {
  80. String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$";
  81. return Pattern.matches(regex, phone);
  82. }
  83. /**
  84. * 验证Email
  85. *
  86. * @param email email地址,格式:zhangsan@sina.com,zhangsan@xxx.com.cn,xxx代表邮件服务商
  87. * @return 验证成功返回true,验证失败返回false
  88. */
  89. public static boolean checkEmail(String email) {
  90. String regex = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?";
  91. return Pattern.matches(regex, email);
  92. }
  93. /**
  94. * 验证整数(正整数和负整数)
  95. *
  96. * @param digit 一位或多位0-9之间的整数
  97. * @return 验证成功返回true,验证失败返回false
  98. */
  99. public static boolean checkDigit(String digit) {
  100. String regex = "\\-?[1-9]\\d+";
  101. return Pattern.matches(regex, digit);
  102. }
  103. /**
  104. * 验证整数和浮点数(正负整数和正负浮点数)
  105. *
  106. * @param decimals 一位或多位0-9之间的浮点数,如:1.23,233.30
  107. * @return 验证成功返回true,验证失败返回false
  108. */
  109. public static boolean checkDecimals(String decimals) {
  110. String regex = "\\-?[1-9]\\d+(\\.\\d+)?";
  111. return Pattern.matches(regex, decimals);
  112. }
  113. /**
  114. * 验证空白字符
  115. *
  116. * @param blankSpace 空白字符,包括:空格、\t、\n、\r、\f、\x0B
  117. * @return 验证成功返回true,验证失败返回false
  118. */
  119. public static boolean checkBlankSpace(String blankSpace) {
  120. String regex = "\\s+";
  121. return Pattern.matches(regex, blankSpace);
  122. }
  123. /**
  124. * 验证中文
  125. *
  126. * @param chinese 中文字符
  127. * @return 验证成功返回true,验证失败返回false
  128. */
  129. public static boolean checkChinese(String chinese) {
  130. String regex = "^[\u4E00-\u9FA5]+$";
  131. return Pattern.matches(regex, chinese);
  132. }
  133. /**
  134. * 验证日期(年月日)
  135. *
  136. * @param birthday 日期,格式:1992-09-03,或1992.09.03
  137. * @return 验证成功返回true,验证失败返回false
  138. */
  139. public static boolean checkBirthday(String birthday) {
  140. String regex = "[1-9]{4}([-./])\\d{1,2}\\1\\d{1,2}";
  141. return Pattern.matches(regex, birthday);
  142. }
  143. /**
  144. * 验证URL地址
  145. *
  146. * @param url 格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80
  147. * @return 验证成功返回true,验证失败返回false
  148. */
  149. public static boolean checkURL(String url) {
  150. String regex = "(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?";
  151. return Pattern.matches(regex, url);
  152. }
  153. /**
  154. * 匹配中国邮政编码
  155. *
  156. * @param postcode 邮政编码
  157. * @return 验证成功返回true,验证失败返回false
  158. */
  159. public static boolean checkPostcode(String postcode) {
  160. String regex = "[1-9]\\d{5}";
  161. return Pattern.matches(regex, postcode);
  162. }
  163. /**
  164. * 匹配IP地址(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段的大小)
  165. *
  166. * @param ipAddress IPv4标准地址
  167. * @return 验证成功返回true,验证失败返回false
  168. */
  169. public static boolean checkIpAddress(String ipAddress) {
  170. String regex = "[1-9](\\d{1,2})?\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))";
  171. return Pattern.matches(regex, ipAddress);
  172. }
  173. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/286301
推荐阅读
相关标签
  

闽ICP备14008679号