PCRE匹配捕获子模式
PCRE matching catching subpatterns
不好意思想不通,只好请教。但是假设我有一个字符串
我想匹配一个或两个单词的地方。第一个词必须始终匹配,第二个词有时存在有时不存在,因此如果存在则应匹配。如果不存在,第一个单词仍必须匹配。 IE。如果第二个词不存在,整个表达式不能失败。
"this <word> must always be matched and this <word1> will maybe be matched"
天真的我试过了
(word).*(word1)?
但即使两个词都存在,也只返回 <word>
。如果我删除“?”返回两个单词,但如果 <word1>
不存在则返回“不匹配”。
~/ % pcretest
PCRE version 8.45 2021-06-15
re> "(word).*(word1)"
data> this is <word> and this is <word1>"
0: word> and this is <word1
1: word
2: word1
re> "(word).*(word1)?"
data> this is <word> and this is <word1>"
0: word> and this is <word1>"
1: word
re> "(word).*(word1)"
data> this is <word> and this is"
No match
你可以使用
(word)(?:.*(word1))?
参见regex demo。详情:
(word)
- word
被捕获到组 1
(?:.*(word1))?
- 可选的非捕获组匹配一次或零次出现
.*
- 除换行字符外的任何零个或多个字符尽可能多
(word1)
- word1
捕获到第 2 组。
不好意思想不通,只好请教。但是假设我有一个字符串 我想匹配一个或两个单词的地方。第一个词必须始终匹配,第二个词有时存在有时不存在,因此如果存在则应匹配。如果不存在,第一个单词仍必须匹配。 IE。如果第二个词不存在,整个表达式不能失败。
"this <word> must always be matched and this <word1> will maybe be matched"
天真的我试过了
(word).*(word1)?
但即使两个词都存在,也只返回 <word>
。如果我删除“?”返回两个单词,但如果 <word1>
不存在则返回“不匹配”。
~/ % pcretest
PCRE version 8.45 2021-06-15
re> "(word).*(word1)"
data> this is <word> and this is <word1>"
0: word> and this is <word1
1: word
2: word1
re> "(word).*(word1)?"
data> this is <word> and this is <word1>"
0: word> and this is <word1>"
1: word
re> "(word).*(word1)"
data> this is <word> and this is"
No match
你可以使用
(word)(?:.*(word1))?
参见regex demo。详情:
(word)
-word
被捕获到组 1(?:.*(word1))?
- 可选的非捕获组匹配一次或零次出现.*
- 除换行字符外的任何零个或多个字符尽可能多(word1)
-word1
捕获到第 2 组。