一般来说,我想在字符串中找到一些子字符串,但前提是它包含在那里.
我有表情:
^.*(\bpass\b)?.*$
Run Code Online (Sandbox Code Playgroud)
并测试字符串:
high pass h3
Run Code Online (Sandbox Code Playgroud)
当我通过表达式测试字符串时,我看到找到整个字符串(但是组"传递"不是):
match : true
groups count : 1
group : high pass h3
Run Code Online (Sandbox Code Playgroud)
但我需要的是,这场比赛有两组:1:高传h3 2:传球
当我测试时,例如,字符串 - 高h3,我仍然找到1组 - 高h3
我怎样才能做到这一点?
pio*_*ouM 64
使用这个:
^(.*?(\bpass\b)[^$]*)$
Run Code Online (Sandbox Code Playgroud)
检查演示.
更多解释:
? first capture
|
?------------------?
^(.*?(\bpass\b)[^$]*)$
?-? ?---?
| ?--------? |
| | ? all characters who are not the end of the string
| |
| ? second capture
|
? optional begin characters
Run Code Online (Sandbox Code Playgroud)
你只是缺少一点工作(加上?
错误的位置).
如果你想匹配frist发生:^(.*?)(\bpass\b)(.*)$
.如果你想匹配最后一次出现:^(.*)(\bpass\b)(.*?)$
.
这将导致3个捕获组:之前的所有内容,完全匹配以及随后的所有内容.
.
将匹配(几乎取决于您的设置)任何东西,但只有一个字符.
?
将使前面的元素可选,即根本不显示或仅显示一次.
*
将多次匹配前面的元素,即根本不匹配或无限次.这将匹配尽可能多的字符.如果你将两者结合起来*?
就会得到一个不合适的匹配,基本上匹配尽可能少的字符(低至0).
编辑:当我读到你只想要pass
和完整的字符串,取决于你的实现/语言,以下应该是足够的:( ^.*(\bpass\b).*?$
同样,不合适的匹配可能与贪婪的匹配).您将获得整个表达式/匹配作为组0,并将第一个定义的匹配作为组1.
句点仅匹配单个字符,因此您
^.(\bpass\b)?.$
Run Code Online (Sandbox Code Playgroud)
正在匹配:
我根本不希望与“高通 h3”相匹配。
正则表达式:
pass
Run Code Online (Sandbox Code Playgroud)
(无元字符)将匹配任何包含“pass”的字符串(但“在字符串中查找字符串”函数也会匹配,并且如果没有正则表达式的复杂性,这可能会更快)。
归档时间: |
|
查看次数: |
239446 次 |
最近记录: |