У меня сейчас есть это:
^(.+)\(\w+\)|^(.+)\s\(\d{3}\:\d{3}\s\-\s\d{3}\:\d{3}\)
# 1, которому он соответствует только Foo's
# 2 Foo имеет , что является правильным
#3 соответствует foo , но находится в третьем элементе массива [2]:
3rd array output:
(
[0] => Foo (100:200 - 300:400)
[1] =>
[2] => Foo
)
Жирный это то, что я пытаюсь соответствовать: Foo's (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)"
Другая часть "(not_matched) (100: 200 - 300: 400)" может быть идентифицирована, так как она имеет только 1 пробел между 2 круглыми скобками not_matched и (100: 200 - 300: 400)
Редактировать:
Это то, что я придумала, и это, кажется, работает, хотя для того, чтобы быть полезным, нужны некоторые обходные пути в php.1044 *
(.+)\s\(\w+\)\s\(|(.+)\s\(\d{3}\:\d{3}\s\-\s\d{3}\:\d{3}\)
Рабочий пример: http://www.rubular.com/r/NSpGcnyg0p
По какой-то причине это, похоже, не спасло мой пример, так что вы будетенужно скопировать / вставить его.
Но регулярное выражение не имеет прямого соответствия для каждого из них, поэтому мне нужно удалить пустой элемент массива в php, чтобы я получил результатв элементе [1].
Кто-нибудь может увидеть, что я делаю неправильно в своем регулярном выражении?