① 正則表達式如何匹配小括弧
小括弧在正在裡面有特殊含義,需要匹配小括弧【(】、【)】本身兩個符號,可以使用轉義符號\,也就是【\(】、【\)】
② 正則表達式中的小括弧和中括弧,有什麼區別呢
最基本的意思:小括弧就是括弧內看成一個整體 ,中括弧就是匹配括弧內的其中一個,大括弧就是匹配幾次
但是括弧里變加上其他字元就有不同意思 詳細介紹 例如:
{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」。
.
匹配除「\n」之外的任何單個字元。要匹配包括「\n」在內的任何字元,請使用像「[.\n]」的模式。
(pattern)
匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括弧字元,請使用「\(」或「\)」。
(?:pattern)
匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用或字元「(|)」來組合一個模式的各個部分是很有用。例如「instr(?:y|ies)」就是一個比「instry|instries」更簡略的表達式。
(?=pattern)
正向預查,在任何匹配pattern的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後
使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配
「Windows3.1」中的「Windows」。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從
包含預查的字元之後開始。
(?!pattern)
負向預查,在任何不匹配pattern的字元串開始處匹配查找字元串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以
後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配
「Windows2000」中的「Windows」。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是
從包含預查的字元之後開始
x|y
匹配x或y。例如,「z|food」能匹配「z」或「food」。「(z|f)ood」則匹配「zood」或「food」。
[xyz]
字元集合。匹配所包含的任意一個字元。例如,「[abc]」可以匹配「plain」中的「a」。
[^xyz]
負值字元集合。匹配未包含的任意字元。例如,「[^abc]」可以匹配「plain」中的「p」。
[a-z]
字元范圍。匹配指定范圍內的任意字元。例如,「[a-z]」可以匹配「a」到「z」范圍內的任意小寫字母字元。
[^a-z]
負值字元范圍。匹配任何不在指定范圍內的任意字元。例如,「[^a-z]」可以匹配任何不在「a」到「z」范圍內的任意字元。
③ JavaScript 正則表達式 轉義的使用方法
首先,你是用字元串構造一個正則,在字元串里反斜杠就轉義一次。
然後字元串構造為正則的時候會再次對串中的反斜杠進行轉義。
所以對於'at'進行匹配,應該是四個反斜杠。
或者用這種語法:
varre1=/.at/g;
varre3=/.at/g;
//match'at'
varre4=/\at/g;
④ 請問正則表達式匹配括弧的問題
在正則表達式中()表示一個分組,()屬於正則表達式的特殊字元,是具有實際意義的,所以要匹配括弧必須要加上 反斜杠 \( 來說明這表示的是一個普通的小括弧,而不是一個正則分組
⑤ 正則表達式中,在括弧內的特殊字元哪些需要轉義
$匹配輸入字元串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 『\n' 或 『\r'。要匹配 $ 字元本身,請使用 \$。
( )標記一個子表達式的開始和結束位置。子表達式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。
*匹配前面的子表達式零次或多次。要匹配 * 字元,請使用 \*。
+匹配前面的子表達式一次或多次。要匹配 + 字元,請使用 \+。
.匹配除換行符 \n之外的任何單字元。要匹配 .,請使用 \。
[ ]標記一個中括弧表達式的開始。要匹配 [,請使用 \[。
?匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 \?。
\ 將下一個字元標記為或特殊字元、或原義字元、或向後引用、或八進制轉義符。例如, 『n' 匹配字元 『n'。'\n' 匹配換行符。序列 『\\' 匹配 「\」,而 『\(' 則匹配 「(」。
^匹配輸入字元串的開始位置,除非在方括弧表達式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 \^。
{ } 標記限定符表達式的開始。要匹配 {,請使用 \{。
| 指明兩項之間的一個選擇。要匹配 |,請使用 \|。
⑥ 正則表達式中方括弧用.為什麼要用\來轉意
我用正則狗把\去掉了能匹配成功啊。不過加\是正確的,因為這里現在要表示的就是"."而不是正則中.所代表的所有字元,所以要用\轉義。
⑦ 正則表達式中的小括弧
(如有錯誤,歡迎指正)
眾所周知,正則表達式的括弧大致分為以下幾類
看起來很容易,用起來很復雜。
尤其是當 () 承擔著更多復雜含義的時候:分組和捕獲
簡單來說,分組指匹配若干個連續字元: [a-z] 只能匹配一個 a-z 中的任意一個字元,但 (abcdefg) 匹配的是 abcdefg 。捕獲指獲取到字元串匹配正則表達式的 () 中的部分。對於 /\d+(\w+)/ 與 123abc ,捕獲可以簡單理解為 abc
自然是看不懂的,好在後面舉了🌰
果然,還是看不懂,甚至連這個正則表達式想干什麼都看不明白,這就需要來測試一下給的例子了。
終於有一個是true了,果然dada是一個令人開心的東西……
根據dada,再回頭看這個正則表達式,^表示開頭,()表示分組匹配,[]表示dtn三者選其一,\1是表示相等,這個相等針對的是()中的字元,本例中指a前面的字元,此時a前面的字元是d,那麼\1就指代d
多試幾個
此時再回過頭去看前面的定義,似乎有些理解了。撇開「反向引用」這個術語不談,將待匹配的字元串記為S,\1表示與S相等才進行匹配
理解了\1,\2也就容易理解了
\1,\2隻表示需要它們出現的位置,與中間有沒有分組關系不大
反向引用適合用在HTML標簽的匹配上,例如
捕獲可以簡單理解為 正則表達式匹配到的內容
先看一個正則表達式
看起來挺復雜,掐頭去尾之後就簡單了
綜上,這一正則表達式捕獲的內容是 translateY(XXX) 中的 XXX ,其中XXX不能包含右括弧,若干包含,即為右括弧前面的字元。
輸出的match為
match方法匹配結果通過第一個索引返回
每次捕獲的結果依次遞增,滿足條件的值存儲在match[1]的位置處(如果有多個會放在match[2]...中)
若 str = 'translateY(15p)x)' ,則 match[1] 為 15p
匹配的結果指滿足正則表達式要求的完整字元串,它可以是給定的字元串也可以是給定字元串的一部分。
捕獲即為滿足()內條件的字元串。
(雖然不一定十分准確,但暫時應該可以這么理解)
當使用全局正則表達式時,會返回全部匹配的結果,但不會返回捕獲結果
輸出的結果為
可以看出,有3個待匹配的捕獲,在match的1-3位輸出,match[0]則是第一個滿足正則表達式條件的字元串。
注意此時的正則表達式並非全部匹配(沒有 /g )
如果換成全局匹配,正則表達式後加一個 g
輸出的結果為
可以看到,只有匹配的結果(滿足正則表達式的字元串),沒有捕獲的結果(滿足每一個分組正則表達式的字元串)
如果需要捕獲的結果,需要用到 exec 方法
輸出的是,可以看到輸出了每一個捕獲
用 $1, $2, $3 表示
示例表示將大寫字母替換為 -小寫
正則表達式涉及到三個方法,用reg表示正則表達式,str表示待匹配的字元串
⑧ JAVA中的正則表達式「\\[([^\\]]+)\\]」這個表示什麼意思兩個轉義字元是為了表達什麼
在正則中括弧表示字元集,要表示中括弧字元必須轉義
整個正則匹配 中括弧中的內容
開頭的\\[ 匹配" [ "字元
尾部的\\]匹配 「]"字元
中間的[([^\\]]+),表示所有非"]"字元組成的字元串