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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 正则表达

發(fā)布時(shí)間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 正则表达 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正則表達(dá)式(英語(yǔ):Regular?Expression)原屬于計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里邊,正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式的文本。許多程序設(shè)計(jì)語(yǔ)言都支持利用正則表達(dá)式進(jìn)行字符串操作。例如,Perl,Shell,R,Java等等。

元字符

描述

\

將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè)向后引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,“\\n”匹配\n。“\n”匹配換行符。序列“\\”匹配“\”而“\(”則匹配“(”。即相當(dāng)于多種編程語(yǔ)言中都有的“轉(zhuǎn)義字符”的概念。

^

匹配輸入字符串的開始位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。

$

匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。

*

匹配前面的子表達(dá)式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等價(jià)于{0,}。

+

匹配前面的子表達(dá)式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價(jià)于{1,}。

?

匹配前面的子表達(dá)式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價(jià)于{0,1}。

{n}

n是一個(gè)非負(fù)整數(shù)。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個(gè)o。

{n,}

n是一個(gè)非負(fù)整數(shù)。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價(jià)于“o+”。“o{0,}”則等價(jià)于“o*”。

{n,m}

m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個(gè)o。“o{0,1}”等價(jià)于“o?”。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。

?

當(dāng)該字符緊跟在任何一個(gè)其他限制符(*,+,?,{n},{n,},{n,m})后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串“oooo”,“o+?”將匹配單個(gè)“o”,而“o+”將匹配所有“o”。

元字符是一個(gè)預(yù)定義的字符。

正則表達(dá)式描述
\d匹配一個(gè)數(shù)字,是?[0-9]?的簡(jiǎn)寫
\D匹配一個(gè)非數(shù)字,是?[^0-9]?的簡(jiǎn)寫
\s匹配一個(gè)空格,是?[ \t\n\x0b\r\f]?的簡(jiǎn)寫
\S匹配一個(gè)非空格
\w匹配一個(gè)單詞字符(大小寫字母、數(shù)字、下劃線),是?[a-zA-Z_0-9]?的簡(jiǎn)寫
\W匹配一個(gè)非單詞字符(除了大小寫字母、數(shù)字、下劃線之外的字符),等同于?[^\w]

限定符定義了一個(gè)元素可以發(fā)生的頻率。

正則表達(dá)式描述舉例
*匹配 >=0 個(gè),是?{0,}?的簡(jiǎn)寫X*?表示匹配零個(gè)或多個(gè)字母 X,.*表示匹配任何字符串
+匹配 >=1 個(gè),是?{1,}?的簡(jiǎn)寫X+?表示匹配一個(gè)或多個(gè)字母 X
?匹配 1 個(gè)或 0 個(gè),是?{0,1}?的簡(jiǎn)寫X??表示匹配 0 個(gè)或 1 個(gè)字母 X
{X}只匹配 X 個(gè)字符\d{3}?表示匹配 3 個(gè)數(shù)字,.{10}表示匹配任何長(zhǎng)度是 10 的字符串
{X,Y}匹配 >=X 且 <=Y 個(gè)\d{1,4}?表示匹配至少 1 個(gè)最多 4 個(gè)數(shù)字
*?如果???是限定符?*?或?+?或???或?{}?后面的第一個(gè)字符,那么表示非貪婪模式(盡可能少的匹配字符),而不是默認(rèn)的貪婪模式

Java中的反斜杠:反斜杠?\?在 Java 中表示轉(zhuǎn)義字符,這意味著?\?在 Java 擁有預(yù)定義的含義。

這里例舉兩個(gè)特別重要的用法:

  • 在匹配?.?或?{?或?[?或?(?或???或?$?或?^?或?*?這些特殊字符時(shí),需要在前面加上?\\,比如匹配?.?時(shí),Java 中要寫為?\\.,但對(duì)于正則表達(dá)式來(lái)說(shuō)就是?\.。
  • 在匹配?\?時(shí),Java 中要寫為?\\\\,但對(duì)于正則表達(dá)式來(lái)說(shuō)就是?\\。

注意:Java 中的正則表達(dá)式字符串有兩層含義,首先 Java 字符串轉(zhuǎn)義出符合正則表達(dá)式語(yǔ)法的字符串,然后再由轉(zhuǎn)義后的正則表達(dá)式進(jìn)行模式匹配。

表達(dá)式:[ ]與()

  • [jpg|png]?代表匹配?j?或?p?或?g?或?p?或?n?或?g?中的任意一個(gè)字符。
  • (jpg|png)?代表匹配?jpg?或?png。

正則中的前瞻,后顧,負(fù)前瞻,負(fù)后顧四個(gè)概念

前瞻: exp1(?=exp2) 查找exp2前面的exp1

后顧: (?<=exp2)exp1 查找exp2后面的exp1

負(fù)前瞻: exp1(?!exp2) 查找后面不是exp2的exp1

負(fù)后顧: (?<!=exp2)exp1 查找前面不是exp2的exp1

如:b.regexp("(?<!\\\\)[\\s]*+")表示匹配前面不是\\的n(n>=0)個(gè)空格

[\\s]* 表示>=0 個(gè)空格

如:b.regexp("([^=:\\s]|(?<=\\\\)\\ |(?<=\\\\)\\=|(?<=\\\\)\\:)+")

(?<=\\\\)表示 \

表示匹配字符串以=:空格其中一個(gè)開始 或 \\?或 \\= 或 \\: 多個(gè)

例如:b.regexp("^\\[.*?\\]$") 匹配前后[ ]

例如:b.regexp("^\\s*+\\-\\s") 匹配“? ?- xxxxx ”

中文匹配:

[\u4e00-\u9fa5]+?代表匹配中文字。

可以在正則的開頭指定模式修飾符:

  • (?i)?使正則忽略大小寫。
  • (?s)?表示單行模式("single line mode")使正則的?.?匹配所有字符,包括換行符。
  • (?m)?表示多行模式("multi-line mode"),使正則的?^?和?$?匹配字符串中每行的開始和結(jié)束。

總結(jié)

以上是生活随笔為你收集整理的java 正则表达的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。