我有一个多行文本,我试图验证在预期的顺序中有一组特定的子串。例如:
orange: VGHM00112900837-00692
banana: LAPM00112900837-00692_1
apple: CAPM00112900837-00692
我需要验证文本以" orange"开头,然后是" banana",然后有" apple"。这些子串之间的字符无关紧要,但它们必须按橙色,香蕉,苹果的顺序排列。最重要的是,每个子字符串只能在此序列中出现一次。
我一直坐在这里,在一个在线的Regex测试仪上调整了几个小时,我的cro-magnon大脑太密集了,无法弄明白。我能得到的最接近的是......
^(?s)orange(.*)banana(.*)apple(.*)$
...但是这样可以在字符串中重复。我已经尝试了很多来自stackoverflow的不同建议,但由于某些原因我无法做到正确。
感谢您的帮助!
答案 0 :(得分:1)
\borange\b(?:(?!\b(?:banana|apple|orange)\b)[\s\S])*?\bbanana\b(?:(?!\b(?:orange|apple|banana)\b)[\s\S])*?\bapple\b(?:(?!\b(?:orange|apple|banana)\b)[\s\S])*
您可以使用lookahead
构建正则表达式,以确保每个字符串只出现一次。请参阅演示。