正则表达式,用于在字符“ y”之前选择最多在字符“ x”之前的字符

时间:2019-04-01 13:07:33

标签: java regex regex-negation

要从set transaction read committed record_version; first中选择文本。
需要先寻找the char before 'x' before 'y',然后向后寻找'y'的第一个匹配项(或发现的最后'x'个),然后选择直到该'x'之前的那个。

示例:(输入->输出)

'x'

(直到abxabxaby -> abxab 的第一个出现是y。然后直到出现的第一个倒退abxabxaby(或找到的最后一个x)是x且在{之前{1}}是abxabx

x

(直到abxab的第一次出现是12xabcyabcxay -> 12 ,然后首先向后y12xabcy并且在x12x之前)

x

(规则相同。12,然后是abcxy -> abc ,所以abcxy

abcx

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

^[^y]*(?=x)

它会贪婪地找到不是y的所有内容,直到看到x。 “不是y的所有内容”部分可确保找到字符串中的第一个y。并且“贪心”部分可确保在第一个x之前找到 last y

但是,如果字符串中没有y,则此方法将无效。因此,您需要使用contains("y")单独检查一下。

答案 1 :(得分:1)

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

Demo

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

的要求