人随天意 發表於 2022-11-29 11:47:25

Java 中的正则表达式单字符预定义字符匹配问题

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、需求</a></li><li><a href="#_label1">二、单字符匹配(6个)</a></li><li><a href="#_label2">三、预定义字符(7个)</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、需求</h2>
<blockquote><p>❓ 现有一个字符串,需满足如下要求:<br />① <strong></strong> 个字符<br />② 只能包含字母、数字、下划线<br />③ 需以字母开头<br />❓ 如果字符串满足上述要求,返回 <strong>true</strong>,否则返回 <strong>false</strong></p></blockquote>
<div class="jb51code"><pre class="brush:java;">public static boolean validString(String s) {
       return s.matches("{5,17}");
   }</pre></div>
<blockquote><p>🍀 正则表达式用极简的规则取代了复杂的验证逻辑<br />🍀 Regex Expression<br />🍀 正则表达式是一种通用的技术,适用于多种编程语言</p></blockquote>
<p class="maodian"><a name="_label1"></a></p><h2>二、单字符匹配(6个)</h2>
<p>✏️ ① <code></code>:字符串的<strong>某个位置</strong>(某一个字符)满足 a、b、c 中的一个</p>
<blockquote><p>🍀 <code>某个位置</code>:该【单字符匹配】放的位置</p></blockquote>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex = "";
      System.out.println("z".matches(regex)); // true
      System.out.println("g".matches(regex)); // true
      System.out.println("q".matches(regex)); // true
      System.out.println("zgq".matches(regex)); // false
    }
}</pre></div>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex = "263q";
      System.out.println("26a3q".matches(regex)); // true
      System.out.println("26abc".matches(regex)); // false
      System.out.println("26b3q".matches(regex)); // true
    }
}</pre></div>
<p>✏️ ② <code>[^abc]</code>:除了 a、b、c 之外的任意单个字符</p>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex = "[^cat]666";
      System.out.println("c666".matches(regex)); // false
      System.out.println("a666".matches(regex)); // false
      System.out.println("t666".matches(regex)); // false
      System.out.println("bb666".matches(regex)); // false
      System.out.println("b666".matches(regex)); // true
    }
}</pre></div>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex1 = "666";
      String regex2 = "[^1-5]666";
      System.out.println("1666".matches(regex1)); // true
      System.out.println("3666".matches(regex1)); // true
      System.out.println("5666".matches(regex1)); // true
      System.out.println("6666".matches(regex1)); // false

      System.out.println("1666".matches(regex2)); // false
      System.out.println("3666".matches(regex2)); // false
      System.out.println("5666".matches(regex2)); // false

      System.out.println("6666".matches(regex2)); // true
    }
}</pre></div>
<p>✏️ ③ <code></code>:匹配单个英文字母</p>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex = "666";
      System.out.println("6666".matches(regex)); // false
      System.out.println("b666".matches(regex)); // true
    }
}</pre></div>
<p>✏️ ④ <code>]</code>:和 <code></code> 一样(并集)</p>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex1 = "]";
      String regex2 = "";
      System.out.println("a".matches(regex1)); // true
      System.out.println("e".matches(regex1)); // false
      System.out.println("1".matches(regex1)); // true
      System.out.println("7".matches(regex1)); // false

      System.out.println("a".matches(regex2)); // true
      System.out.println("e".matches(regex2)); // false
      System.out.println("1".matches(regex2)); // true
      System.out.println("7".matches(regex2)); // false
    }
}</pre></div>
<p>✏️ ⑤ <code>]</code>:交集</p>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex1 = "]";
      System.out.println("q".matches(regex1)); // false
      System.out.println("d".matches(regex1)); // false
      System.out.println("g".matches(regex1)); // true
    }
}</pre></div>
<p>✏️ ⑥ <code>]</code>:取差集</p>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String regex1 = "]";
      System.out.println("q".matches(regex1)); // true
      System.out.println("d".matches(regex1)); // false
      System.out.println("g".matches(regex1)); // false
      System.out.println("z".matches(regex1)); // true

      // 取差集, 从字母 a 到字母 z 中去除字母 b 和 d
      String regex2 = "]";
      System.out.println("d".matches(regex2)); // false
      System.out.println("a".matches(regex2)); // true
    }
}</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>三、预定义字符(7个)</h2>
<p><strong>预定义字符匹配的仍然是单个字符</strong></p>
<p>📝 【<strong>.</strong>】:任意单个字符<br />📝 【<strong>\d</strong>】:数字<br />📝 【<strong>\D</strong>】:非数字<br />📝 【<strong>\s</strong>】:空白<br />📝 【<strong>\S</strong>】:非空白<br />📝 【<strong>\w</strong>】:<strong>字母</strong>(英文字母、下划线、数字)<br />📝 【<strong>\W</strong>】:非英文字母</p>
<blockquote><p>🍀 Java 中需以两个【\】开头表示预定义字符</p></blockquote>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String r1 = ".";
      System.out.println("@".matches(r1)); // true
      System.out.println("庆".matches(r1)); // true
      System.out.println("I".matches(r1)); // true
      System.out.println(" ".matches(r1)); // true
      System.out.println(".".matches(r1)); // true
    }
}</pre></div>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      // 匹配 java 文件
      String r1 = ".\\.java";
      System.out.println("a.java".matches(r1)); // true
      System.out.println("xjava".matches(r1)); // false
      System.out.println("5java".matches(r1)); // false
    }
}</pre></div>
<div class="jb51code"><pre class="brush:java;">public class TestDemo {
    public static void main(String[] args) {
      String r1 = "";
      String r2 = "\\";
      System.out.println("a".matches(r1)); // true
      System.out.println("c".matches(r1)); // true
      System.out.println("".matches(r1)); // false

      System.out.println("a".matches(r2)); // false
      System.out.println("c".matches(r2)); // false
      System.out.println("".matches(r2)); // true
    }
}</pre></div>
頁: [1]
查看完整版本: Java 中的正则表达式单字符预定义字符匹配问题