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

Java 用于在字符“y”之前的字符“x”之前选择最多字符的正则表达式,java,regex,regex-negation,Java,Regex,Regex Negation,要选择从第一个到“y”之前的“x”之前的字符的文本。 需要先查找“y”,然后在查找中向后查找第一个出现的“x”或最后一个“x”,并选择“x”之前的最新值 示例:输入->输出 abxabxaby -> abxab 直到第一次出现y为止,是abxabxaby。然后直到查找中的第一个向后x或最后一个x是abxabx,在x之前是abxab 直到第一次出现的y是12xabcy,然后第一次向后出现的x是12x,在x之前出现的x是12 同样的规则。abcxy,然后abcx所以abc 您可以使用此正则

要选择从第一个到“y”之前的“x”之前的字符的文本。 需要先查找“y”,然后在查找中向后查找第一个出现的“x”或最后一个“x”,并选择“x”之前的最新值

示例:输入->输出

abxabxaby -> abxab 
直到第一次出现y为止,是abxabxaby。然后直到查找中的第一个向后x或最后一个x是abxabx,在x之前是abxab

直到第一次出现的y是12xabcy,然后第一次向后出现的x是12x,在x之前出现的x是12

同样的规则。abcxy,然后abcx所以abc


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

^[^y]*(?=x)
它贪婪地找到所有不是y的东西,直到它看到一个x。所有不是y部分的元素都确保它找到字符串中的第一个y。贪婪部分确保在第一个y之前找到最后一个x

但是,如果字符串没有y,则此操作将不起作用。因此,您需要单独检查,只需使用containsy。

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


请注意,这也将满足abcx->No match的要求,因为No y

请求正则表达式与请求某人为您编写代码非常相似。请展示您的研究结果和您自己的代码,我们将很乐意为您指明正确的方向。为什么不直接使用lookback?@Michael您能解释一下您的意思吗?另外,如果你有一个解决方案,为什么不把它作为答案发布呢?谢谢@Sweeper。到目前为止,不可能是“y”,因此这将很好地工作,但如果我找到更具体的解决方案,我将更新:
abcxy -> abc
abcx -> (No match, as no y)
abcy -> (No match, as no x)
abcyx -> (No match, not in correct order)
^[^y]*(?=x)