Min*_*int 5 php regex preg-match
我目前有这个:
^(.+)\(\w+\)|^(.+)\s\(\d{3}\:\d{3}\s\-\s\d{3}\:\d{3}\)
Run Code Online (Sandbox Code Playgroud)
#1它只匹配Foo的
#2 Foo是正确的
#3匹配foo但是它在第3个数组项[2]中:
3rd array output:
(
[0] => Foo (100:200 - 300:400)
[1] =>
[2] => Foo
)
Run Code Online (Sandbox Code Playgroud)
粗体是我想要匹配的:
Foo(match11)这个(100:200 - 300:400)结束#1
Foo有(not_matched)(100:200 - 300:400)结束#2
Foo(100 :200 - 300:400)结束#3
注意:我没有尝试匹配每一行末尾的#1,#2,#3,仅供参考.
如果找到"(100:200 - 300:400)"然后得到它前面的任何文字,如果"(not_matched)(100:200 - 300:400)"找到然后得到它前面的任何文字,否则得到"(100:200 - 300:400)"前面的文字
可以识别elseif部分"(not_matched)(100:200 - 300:400)",因为它在not_matched和(100:200 - 300:400)的2个圆括号之间只有1个空格.
编辑:
这就是我提出的似乎有效的方法,虽然它需要一些PHP中的解决方法才有用.
(.+)\s\(\w+\)\s\(|(.+)\s\(\d{3}\:\d{3}\s\-\s\d{3}\:\d{3}\)
Run Code Online (Sandbox Code Playgroud)
工作示例:http://www.rubular.com/r/NSpGcnyg0p
由于某种原因,它似乎没有保存我的示例,因此您必须复制/粘贴它.
但正则表达式并没有直接匹配它们,这就是为什么我必须删除php中的空数组元素,以便我在[1]元素中得到结果.
任何人都可以在我的正则表达式中看到我做错了什么?
尝试这个:
^.*?(?=\s*(?:\(not_matched\)\s)?\(\d+:\d+\s*-\s*\d+:\d+\))
Run Code Online (Sandbox Code Playgroud)
或者,在 PHP 中:
if (preg_match(
'/^ # Anchor the match at start of line
.*? # Match any number of characters lazily
(?= # until just before the following:
\s* # - optional whitespace
(?: # - the following group:
\(not_matched\)\s # - literal (not_matched), followed by 1 whitespace
)? # (which is optional)
\(\d+:\d+\s*-\s*\d+:\d+\) # a group like (nnn:mmm - ooo:ppp)
) # End of lookahead assertion
/x',
$subject, $regs)) {
$result = $regs[0];
} else {
$result = "";
}
Run Code Online (Sandbox Code Playgroud)