Позитивный взгляд на будущее - PullRequest
0 голосов
/ 29 сентября 2011

Я строю это регулярное выражение с позитивным взглядом.По сути, он должен выделить весь текст в строке до последнего периода, который предшествует «:», и добавить «|»до конца, чтобы разграничить его.Пример текста ниже.Я тестирую это в gskinner и editpadpro, который имеет полную поддержку регулярных выражений grep, поэтому, если бы я мог получить ответы на этот вопрос, я был бы признателен.

Регулярное выражение ниже работает до некоторой степени, но я не уверен, если оноверно.Также он падает, если текст содержит квадратные скобки.

Наконец, я хотел бы добавить еще одно правило игнорирования, такое как правило, игнорирующее, но включающее "Ко".в выборе.Это второе правило игнорирования будет игнорировать, но включать периоды, перед которыми стоит одна заглавная буква.Пример текста ниже тоже.Спасибо за помощь.

^(?:[^|]+\|){3}(.*?)[^(?:Co)]\.(?=[^:]*?\:)

121| Ryan, T.N. |2001. |I like regex. But does it like me (2) 2: 615-631.
122| O' Toole, H.Y. |2004. |(Note on the regex). Pages 90-91 In: Ryan, A. & Toole, B.L. (Editors) Guide to the regex functionality in php. Timmy, Tommy& Stewie, Quohog. * Produced for Family Guy in Quohog.

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Не думаю, что понимаю, что вы хотите сделать.Но эта часть [^(?:Co)] определенно неверна.

С помощью квадратных скобок вы создаете класс символов, поскольку ^ это класс с отрицанием.Это означает, что в этом месте вы не хотите совпадать ни с одним из этих символов (?:Co), другими словами, он будет совпадать с любым другим символом, кроме "?) (: Co".

Обновление:

Я не думаю, что это возможно. Как мне отличить L. Co. или что-то подобное от конца предложения?

Но я обнаружил еще одну ошибку в вашем регулярном выражении.Последняя часть (?=[^:]*?\:) должна быть (?=[^.]*?\:), если вы хотите сопоставить последнюю точку перед : с вашим выражением, она будет совпадать с первой точкой.

См. Здесь здесь, в Regexr

0 голосов
/ 29 сентября 2011

Это кажется делать то, что вы хотите.

(.*\.)(?=[^:]*?:)

Он достаточно просто сопоставляет весь текст до последней полной остановки, которая происходит перед двоеточием.

...