前缀中的regex可选部分,但如果存在,则不要将其包含在匹配项中

前缀中的regex可选部分,但如果存在,则不要将其包含在匹配项中,regex,Regex,这个问题在代码中更容易看到,然后在下面的正则表达式中描述 (?您需要额外的负面前瞻: (?<=First(Second)?)(?!Second)\w{5} 你可以试试这个正则表达式(?哦,很酷,谢谢,这是不可能的,对吗?在我的情况下,第二个是相当大的…如果只使用一次正则表达式将受益是的,这总是一个选项,但我需要我的问题结果。我想一定有一种方法可以在(第二个)上使用参考可能是使用平衡组之类的方法捕获?问题是,我得到的是“Secon”有了这个,看起来这根本不起作用,平衡组值在S字符之前停止时

这个问题在代码中更容易看到,然后在下面的正则表达式中描述


(?您需要额外的负面前瞻:

(?<=First(Second)?)(?!Second)\w{5}

你可以试试这个正则表达式
(?哦,很酷,谢谢,这是不可能的,对吗?在我的情况下,第二个是相当大的…如果只使用一次正则表达式将受益是的,这总是一个选项,但我需要我的问题结果。我想一定有一种方法可以在(第二个)上使用参考可能是使用平衡组之类的方法捕获?问题是,我得到的是“Secon”有了这个,看起来这根本不起作用,平衡组值在S字符之前停止时是空的,后缀也是空的。是的,对不起,我没有考虑清楚。我回到我以前的答案。@TimPietzcker不想吹毛求疵,但第一个正则表达式将无法匹配输入文本
FirstSecondSecon中的last
Second
d
。为什么
[\w\w]{5}
?只有在使用JavaScript并希望匹配换行符时,这才有意义。否则,只需使用
{5}
(设置或不设置
(?s)
点匹配所有标记).ive已经编辑过,正在测试一些多行数据,因此,在我们进行测试时:是否有更好的方法捕获任何内容,然后[\w\w]?是的,只需将点与点所有选项一起使用即可(详细信息因regex实现而异)。好主意,如果这五个字符后面没有任何内容。如果这五个字符后面有一些文本,则必须用新模式替换
\w{5}$
,该模式描述特定文本,在匹配自身时排除可选前缀(
Second
)的匹配。实际上\w{5}是另一个复杂的正则表达式,可以出现1次以上,没有已知的结尾。@ValentinKuzub它可以是任何复杂的正则表达式,重要的是,它能否在开始时排除可选前缀(
Second
)的匹配,并能在结束时匹配
$
。即使使用类似
的双环视(?
(?<=First(Second)?)(?!Second)\w{5}
First(?:Second)?(\w{5})