Регулярное выражение для выбора до символа до символа 'х' до символа 'у' - PullRequest
2 голосов
/ 01 апреля 2019

Хотите выбрать текст от first до the char before 'x' before 'y'.
Нужно сначала найти 'y', затем оглянуться назад для первого появления 'x' (или последнего 'x' в поиске) и выбрать до этого 'x'.

Пример: (вход -> выход)

abxabxaby -> abxab 

(до первого вхождения y - abxabxaby. Затем до первого обратного x (или последнего x в поиске) - abxabx, а до x - abxab)

12xabcyabcxay -> 12

(до первого вхождения y - 12xabcy, затем сначала назад x - 12x и до x - 12)

abcxy -> abc

(То же правило. abcxy, затем abcx, поэтому abc)

abcx -> (No match, as no y)
abcy -> (No match, as no x)
abcyx -> (No match, not in correct order)

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Вы можете использовать это регулярное выражение:

^[^y]*(?=x)

Он находит все, что не является y жадно, пока не увидит x. Часть «все, что не является y» гарантирует, что она найдет первый y в строке. И «жадная» часть удостоверяется, что она находит последний x перед первым y.

Однако, это не будет работать, если строка не имеет y. Так что вам нужно проверить это отдельно, просто используя contains("y").

1 голос
/ 01 апреля 2019

Попробуйте Regex: ^(?=.*y)([^y]*)(?=x(?=[^x]*y))

Демо

Обратите внимание, что это также удовлетворит требование abcx -> (No match, as no y)

...