为什么我的正则表达式只返回一组?
Why my Regex is only giving me ONE group back?
我目前创建的正则表达式有问题。正则表达式必须提取所有在 Hello 和 Regards 之间显示数字 #### 的组。此时我的正则表达式只提取一组,我需要里面的所有组,在这种情况下我有 2,但里面可能还有更多。
Regex Image
我正在使用网页https://regex101.com/
口味:PCRE (PHP)
正则表达式:Hello\s.*(number\s*[\d]*)\s.*Regards
文本:
This is my test text number 25120
Hello my name is testing
I'm 20 years old
Please help me with the regex number 1542
I have been trying to create the regex many times this is my number 5152
Regards
I'm still trying my attempt number 5150
结果:
我的结果只有组号5152,里面还有一个组号1542。
您可以使用
(?si)(?:\G(?!\A)|\bHello\b)(?:(?!\bHello\b).)*?\K\bnumber\s*\d+(?=.*?\bRegards\b)
参见regex demo。
详情
(?si)
- s
- DOTALL 修饰符使 .
匹配任何字符,而 i
使模式不区分大小写
(?:\G(?!\A)|\bHello\b)
- 上一场比赛结束 (\G(?!\A)
) 或 (|
) 整个单词 Hello
(\bHello\b
)
(?:(?!\bHello\b).)*?
- 任何字符,出现 0 次或多次但尽可能少,不以整个单词开头 Hello
字符序列
\K
- 丢弃到目前为止匹配的所有文本的匹配重置运算符
\bnumber
- 一个完整的单词 number
\s*
- 0+ 个空格
\d+
- 1+ 位数
(?=.*?\bRegards\b)
- 在任何 0+ 个字符(尽可能少)之后的某处必须有一个完整的单词 Regards
。
我目前创建的正则表达式有问题。正则表达式必须提取所有在 Hello 和 Regards 之间显示数字 #### 的组。此时我的正则表达式只提取一组,我需要里面的所有组,在这种情况下我有 2,但里面可能还有更多。
Regex Image
我正在使用网页https://regex101.com/
口味:PCRE (PHP)
正则表达式:Hello\s.*(number\s*[\d]*)\s.*Regards
文本:
This is my test text number 25120
Hello my name is testing
I'm 20 years old
Please help me with the regex number 1542
I have been trying to create the regex many times this is my number 5152
Regards
I'm still trying my attempt number 5150
结果:
我的结果只有组号5152,里面还有一个组号1542。
您可以使用
(?si)(?:\G(?!\A)|\bHello\b)(?:(?!\bHello\b).)*?\K\bnumber\s*\d+(?=.*?\bRegards\b)
参见regex demo。
详情
(?si)
-s
- DOTALL 修饰符使.
匹配任何字符,而i
使模式不区分大小写(?:\G(?!\A)|\bHello\b)
- 上一场比赛结束 (\G(?!\A)
) 或 (|
) 整个单词Hello
(\bHello\b
)(?:(?!\bHello\b).)*?
- 任何字符,出现 0 次或多次但尽可能少,不以整个单词开头Hello
字符序列\K
- 丢弃到目前为止匹配的所有文本的匹配重置运算符\bnumber
- 一个完整的单词number
\s*
- 0+ 个空格\d+
- 1+ 位数(?=.*?\bRegards\b)
- 在任何 0+ 个字符(尽可能少)之后的某处必须有一个完整的单词Regards
。