[英]A regex to parse regex string
我需要用正則表達式解析一個正則表達式。 我有一個正則表達式字符串:
[a-z]{1}[-][0-9]{4}[-][ab]
解析上面我想出的字符串的實際正則表達式幾乎可以工作是:
/(?|\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g
在這個 regex101示例中可以看到它的作用,這里的錯誤出現在Match 2及其第 1 組( -][0-9
,應該只是-
)中。
目標是匹配方括號[]
內的所有內容,后跟大括號{}
內的數字。 如果方括號[]
之后的大括號{}
丟失,則應使用null填充它,這就是替代組對分支重置組所做的事情。 此外,如果只是方括號后跟一個方括號,那么它預計也會在以后起作用(匹配方括號[]
內部的內容並用null填充第 2 組)。
我的正則表達式不會在第三個[-]
上停止並將其匹配到-][0-9
而不是僅匹配-
然后從解析[0-9]{4}
開始的問題。
預期的匹配應該是:
[a-z]{1}
a-z
1
[-]
-
null
[0-9]{4}
0-9
4
[-]
-
null
[ab]
ab
null
當前匹配不正確,如下:
[a-z]{1}
a-z
1
[-][0-9]{4}
-][0-9
4
[-]
-
null
[ab]
ab
null
我錯過了什么?
這個正則表達式應該工作:
\[([^]]*)](\{\d+\}|)
解釋:
\[
- 匹配[
([^]]*)
- 匹配任何不是]
的字符的 0+ 次出現,並在組 1 中捕獲此子匹配]
- 匹配]
(\{\d+\}|)
- 不匹配任何內容或{
后跟 1+ 位數字后跟}
。 任何匹配的都存儲在第 2 組中如果您在 JS 中編寫這些,則應刪除正則表達式中的第一項( /(\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g
)
如果您想檢查 JS 和 PHP 之間的區別( Php 是 regex101 中的默認值), 此鏈接可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.