用于在 char 'x' 之前选择 char 'y' 之前的 char 的正则表达式

Regex for selecting upto char before char 'x' before char 'y'

想要 select 从 firstthe char before 'x' before 'y' 的文本。
需要先查找 'y',然后向后查找第一次出现的 'x'(或查找中的最后一个 'x')和 select,直至 'x'

示例:(输入 -> 输出)

abxabxaby -> abxab 

(直到第一次出现 yabxabxaby。然后直到第一个向后 x(或查找中的最后一个 x)是 abxabx 和在 x 之前是 abxab)

12xabcyabcxay -> 12

(最多第一次出现 y12xabcy,然后第一个向后出现的 x12x 并且 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)

您可以使用这个正则表达式:

^[^y]*(?=x)

它贪婪地寻找所有不是 y 的东西,直到它看到 x。 "everything that's not a y" 部分确保找到字符串中的第一个 y。 "greedy" 部分确保它在第一个 y.

之前找到 last x

但是,如果字符串没有 y,这将不起作用。所以你需要单独检查,只需使用 contains("y").

试试正则表达式:^(?=.*y)([^y]*)(?=x(?=[^x]*y))

Demo

请注意,这也将满足要求abcx -> (No match, as no y)