文档

java体系技术文档


正则表达式

<h1>正则表达式</h1> <h2>1 什么是正则表达式</h2> <p>正则表达式是一种特殊的字符串模式,定义一种规则用于去匹配符合规则的字符。正则表达式可以用来搜索、编辑或处理文本。它并不仅限于某一种语言,但是在每种语言中有细微的差别。</p> <h2>2 正则表达式语法</h2> <table> <thead> <tr> <th style="text-align: center;">元字符</th> <th style="text-align: center;">描述</th> </tr> </thead> <tbody> <tr> <td style="text-align: center;">\</td> <td style="text-align: center;">将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,&quot;n&quot;匹配字符&quot;n&quot;。&quot;\n&quot;匹配换行符。序列&quot;\\&quot;匹配&quot;\&quot;,&quot;\(&quot;匹配&quot;(&quot;。</td> </tr> <tr> <td style="text-align: center;">^</td> <td style="text-align: center;">匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与&quot;\n&quot;或&quot;\r&quot;之后的位置匹配。</td> </tr> <tr> <td style="text-align: center;">$</td> <td style="text-align: center;">匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与&quot;\n&quot;或&quot;\r&quot;之前的位置匹配。</td> </tr> <tr> <td style="text-align: center;">*</td> <td style="text-align: center;">零次或多次匹配前面的字符或子表达式。例如,zo<em> 匹配&quot;z&quot;和&quot;zoo&quot;。</em> 等效于 {0,}。</td> </tr> <tr> <td style="text-align: center;">+</td> <td style="text-align: center;">一次或多次匹配前面的字符或子表达式。例如,&quot;zo+&quot;与&quot;zo&quot;和&quot;zoo&quot;匹配,但与&quot;z&quot;不匹配。+ 等效于 {1,}。</td> </tr> <tr> <td style="text-align: center;">?</td> <td style="text-align: center;">零次或一次匹配前面的字符或子表达式。例如,&quot;do(es)?&quot;匹配&quot;do&quot;或&quot;does&quot;中的&quot;do&quot;。? 等效于 {0,1}。</td> </tr> <tr> <td style="text-align: center;">{n}</td> <td style="text-align: center;">n 是非负整数。正好匹配 n 次。例如,&quot;o{2}&quot;与&quot;Bob&quot;中的&quot;o&quot;不匹配,但与&quot;food&quot;中的两个&quot;o&quot;匹配。</td> </tr> <tr> <td style="text-align: center;">{n,}</td> <td style="text-align: center;">n 是非负整数。至少匹配 n 次。例如,&quot;o{2,}&quot;不匹配&quot;Bob&quot;中的&quot;o&quot;,而匹配&quot;foooood&quot;中的所有 o。&quot;o{1,}&quot;等效于&quot;o+&quot;。&quot;o{0,}&quot;等效于&quot;o*&quot;。</td> </tr> <tr> <td style="text-align: center;">{n,m}</td> <td style="text-align: center;">m 和 n 是非负整数,其中 n &lt;= m。匹配至少 n 次,至多 m 次。例如,&quot;o{1,3}&quot;匹配&quot;fooooood&quot;中的头三个 o。'o{0,1}' 等效于 'o?'。注意:您不能将空格插入逗号和数字之间。</td> </tr> <tr> <td style="text-align: center;">?</td> <td style="text-align: center;">当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是&quot;非贪心的&quot;。&quot;非贪心的&quot;模式匹配搜索到的、尽可能短的字符串,而默认的&quot;贪心的&quot;模式匹配搜索到的、尽可能长的字符串。例如,在字符串&quot;oooo&quot;中,&quot;o+?&quot;只匹配单个&quot;o&quot;,而&quot;o+&quot;匹配所有&quot;o&quot;。</td> </tr> <tr> <td style="text-align: center;">.</td> <td style="text-align: center;">匹配除&quot;\r\n&quot;之外的任何单个字符。若要匹配包括&quot;\r\n&quot;在内的任意字符,请使用诸如&quot;[\s\S]&quot;之类的模式。</td> </tr> <tr> <td style="text-align: center;">[xyz]</td> <td style="text-align: center;">字符集。匹配包含的任一字符。例如,&quot;[abc]&quot;匹配&quot;plain&quot;中的&quot;a&quot;。</td> </tr> <tr> <td style="text-align: center;">[^xyz]</td> <td style="text-align: center;">反向字符集。匹配未包含的任何字符。例如,&quot;[^abc]&quot;匹配&quot;plain&quot;中&quot;p&quot;,&quot;l&quot;,&quot;i&quot;,&quot;n&quot;。</td> </tr> <tr> <td style="text-align: center;">[a-z]</td> <td style="text-align: center;">字符范围。匹配指定范围内的任何字符。例如,&quot;[a-z]&quot;匹配&quot;a&quot;到&quot;z&quot;范围内的任何小写字母。</td> </tr> <tr> <td style="text-align: center;">[^a-z]</td> <td style="text-align: center;">反向范围字符。匹配不在指定的范围内的任何字符。例如,&quot;[^a-z]&quot;匹配任何不在&quot;a&quot;到&quot;z&quot;范围内的任何字符。</td> </tr> <tr> <td style="text-align: center;">\b</td> <td style="text-align: center;">匹配一个字边界,即字与空格间的位置。例如,&quot;er\b&quot;匹配&quot;never&quot;中的&quot;er&quot;,但不匹配&quot;verb&quot;中的&quot;er&quot;。</td> </tr> <tr> <td style="text-align: center;">\B</td> <td style="text-align: center;">非字边界匹配。&quot;er\B&quot;匹配&quot;verb&quot;中的&quot;er&quot;,但不匹配&quot;never&quot;中的&quot;er&quot;。</td> </tr> <tr> <td style="text-align: center;">\cx</td> <td style="text-align: center;">匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是&quot;c&quot;字符本身。</td> </tr> <tr> <td style="text-align: center;">\d</td> <td style="text-align: center;">数字字符匹配。等效于 [0-9]。</td> </tr> <tr> <td style="text-align: center;">\D</td> <td style="text-align: center;">非数字字符匹配。等效于 [^0-9]。</td> </tr> <tr> <td style="text-align: center;">\f</td> <td style="text-align: center;">换页符匹配。等效于 \x0c 和 \cL。</td> </tr> <tr> <td style="text-align: center;">\n</td> <td style="text-align: center;">换行符匹配。等效于 \x0a 和 \cJ。</td> </tr> <tr> <td style="text-align: center;">\r</td> <td style="text-align: center;">匹配一个回车符。等效于 \x0d 和 \cM。</td> </tr> <tr> <td style="text-align: center;">\s</td> <td style="text-align: center;">匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。</td> </tr> <tr> <td style="text-align: center;">\S</td> <td style="text-align: center;">匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。</td> </tr> <tr> <td style="text-align: center;">\t</td> <td style="text-align: center;">制表符匹配。与 \x09 和 \cI 等效。</td> </tr> <tr> <td style="text-align: center;">\v</td> <td style="text-align: center;">垂直制表符匹配。与 \x0b 和 \cK 等效。</td> </tr> <tr> <td style="text-align: center;">\w</td> <td style="text-align: center;">匹配任何字类字符,包括下划线。与&quot;[A-Za-z0-9_]&quot;等效。</td> </tr> <tr> <td style="text-align: center;">\W</td> <td style="text-align: center;">与任何非单词字符匹配。与&quot;[^A-Za-z0-9_]&quot;等效。</td> </tr> </tbody> </table> <h2>3 捕获组</h2> <p>捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。</p> <p>例如,正则表达式 (dog) 创建了单一分组,组里包含&quot;d&quot;,&quot;o&quot;,和&quot;g&quot;。</p> <p>捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:</p> <ul> <li>((A)(B(C)))</li> <li>(A)</li> <li>(B(C))</li> <li>(C)</li> </ul> <p>可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。</p> <p>还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。</p> <h2>4 java正则表达式主要类</h2> <p>java.util.regex 包主要包括以下三个类:</p> <ul> <li>Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。</li> <li>Matcher 类: Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。</li> <li>PatternSyntaxException: PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。</li> </ul>

页面列表

ITEM_HTML