我目前有这个:
^(.+)\(\w+\)|^(.+)\s\(\d{3}\:\d{3}\s\-\s\d{3}\:\d{3}\)
#1它只匹配Foo的
#2 Foo有正确的
#3与foo匹配,但它在第3个数组项[2]中:
3rd array output:
(
[0] => Foo (100:200 - 300:400)
[1] =>
[2] => Foo
)
大胆是我想要匹配的:
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}\)
工作示例:http://www.rubular.com/r/NSpGcnyg0p
出于某种原因,它似乎没有保存我的示例,因此您必须将其复制/粘贴.
但正则表达式并没有直接匹配它们,这就是为什么我必须删除php中的空数组元素,以便我在[1]元素中得到结果.
任何人都可以在我的正则表达式中看到我做错了什么?