PDA

Просмотр полной версии : regExp: совпадение с конца


TanaTiX
02.01.2011, 19:33
Как при помощи RegExp найти совпадения с конца строки? Варианты реверса строки и прочие извраты не принимаются, как заведомо не правильное решение, реализуемое только как жест отчаяния. Заранее спасибо.

iNils
02.01.2011, 19:42
Поставить $ в конец выражения.
В тексте
abc cde fgh
cde fgh abc
fgh abc cde
выражение
/cde$/gm
возьмет только cde в последней строке

Zebestov
02.01.2011, 20:10
iNils, а если после cde есть еще символы до конца строки?

udaaff
02.01.2011, 22:18
По логике получается, что нужно найти подстроку после которой больше нету совпадений:
/asd(?!.*?asd.*$)/gm
Это в случае, если нужно найти одно совпадение с конца каждой строки. Хотя автор, возможно, и что-то другое хотел.
Проще ничего не придумалось.

TanaTiX
03.01.2011, 12:10
Всем спасибо, вариант iNils - то, что нужно.
Еще вопрос на тему регэксов
Как определить несколько различных совпадений? Флаг g не подходит, т.к. необходимо только по одному совпадению. Я так понимаю, что это возможно без создания 2х экземпляров RegExp.

Wolsh
03.01.2011, 14:35
Скобки? ()
Не совсем понятно о чем Вы.

iNils
04.01.2011, 03:53
Как определить несколько различных совпадений?
Берем первоначальный пример
abc cde fgh
cde fgh abc
fgh abc cde
Нужно найти cde или abc в конце строки
/(cde|abc)$/gm

TanaTiX
04.01.2011, 13:47
iNils, нет, мне к примеру нужно найти cde сначала строки и abc с конца, т.е. найденное должно иметь следующий вид:
abc cde fgh
cde fgh abc
fgh abc cde

Psycho Tiger
04.01.2011, 14:25
2 регекспа не подходит?

TanaTiX
04.01.2011, 14:38
Psycho Tiger, еслим одним это не решить, то подходит. Но тут, как всегда, желание оптимизировать, да и интересно же.

Добавлено через 25 часов 51 минуту
Я так понимаю, что одним проходом это невозможно....