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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 正则表达

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 正则表达 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

元字符

描述

\

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

^

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

$

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

*

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

+

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

?

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

{n}

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

{n,}

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

{n,m}

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

?

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

元字符是一個預定義的字符。

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

限定符定義了一個元素可以發生的頻率。

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

Java中的反斜杠:反斜杠?\?在 Java 中表示轉義字符,這意味著?\?在 Java 擁有預定義的含義。

這里例舉兩個特別重要的用法:

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

注意:Java 中的正則表達式字符串有兩層含義,首先 Java 字符串轉義出符合正則表達式語法的字符串,然后再由轉義后的正則表達式進行模式匹配。

表達式:[ ]與()

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

正則中的前瞻,后顧,負前瞻,負后顧四個概念

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

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

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

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

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

[\\s]* 表示>=0 個空格

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

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

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

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

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

中文匹配:

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

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

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

總結

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

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