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

问题描述 投票:2回答:2

想要从firstthe char before 'x' before 'y'选择文字。 需要首先寻找'y'然后向后看第一次出现'x'(或者找到最后的'x')并选择在那之前的'x'

示例:(输入 - >输出)

abxabxaby -> abxab 

(直到y的第一次出现是abxabxaby。然后第一次向后x(或发现的最后x)是abxabx并且在x之前是abxab

12xabcyabcxay -> 12

(第一次出现的y12xabcy,然后第一次落后的x12x,之前x12

abcxy -> abc

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

abcx -> (No match, as no y)
abcy -> (No match, as no x)
abcyx -> (No match, not in correct order)
java regex regex-negation
2个回答
2
投票

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

^[^y]*(?=x)

它找到了所有不是y的贪婪,直到它看到x。 “所有不是y”的部分确保它找到字符串中的第一个y。而“贪婪”部分确保它在第一个x之前找到了最后一个y

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


1
投票

试试Regex:^(?=.*y)([^y]*)(?=x(?=[^x]*y))

Demo

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

© www.soinside.com 2019 - 2024. All rights reserved.