我这里有一个名单
apple.fruit
appleOrder2.fruit
orange.fruit
我想提取水果名称
预期
apple
apple
orange
我有正则表达式(.*)((Order)|(\.fruit))
从第一位返回,
apple
appleOrder2
orange
我认为\.
搞乱了交替角色,因为当我使用
(.*)((Order)|(ge))
交替工作在第1位正常返回
empty
apple
oran
正在使用Perl
答案 0 :(得分:1)
.*
对你的正则表达式太贪心了。尝试:
(.+?)(?:Order2)?\.fruit
答案 1 :(得分:1)
使用延迟量词:
(.*?)(Order|\.fruit)
在你的正则表达式中,.*
首先匹配整个字符串,然后一次回溯一个字符,直到交替Order|\.fruit
匹配。由于在六次回溯之后已经出现这种情况,因此正则表达式引擎永远不会达到可能找到另一种早期替代品的程度。解决方案:通过向量词添加?
,告诉正则表达式引擎尽可能少匹配字符。
答案 2 :(得分:0)
(* [^订购!?] | [^果!?])((令[0-9])|(.fruit)|((令[0-9])|(.fruit) ))
答案 3 :(得分:0)
在原始表达中:
(.*)((Order)|(\.fruit))
(Order)组不足以匹配第二个示例字符串的“Order2”组件。我想像是这样的东西:
(.*)((Order[0-9]?)|(\.fruit))
或类似的也可以匹配尾随整数(假设它并不总是“Order2”)。
答案 4 :(得分:0)
尝试^([a-z] )(\ n) [在(\ n)之后的asterix,在[a-z]]之后,它会从每一行中获取任何字符。更详细:“^([a-zA-Z0-9] )(\ n)”