正则表达式在后台做什么?

时间:2017-01-30 14:41:08

标签: regex

今天我和正则表达式一起玩,我踩到了一些我不明白为什么会这样做的事情。

这是我正在使用的正则表达式(我为了更好的可读性而对其进行了格式化):

(?<name>[a-z\ ]+[a-zA-Z]+|[a-zA-Z]+)\ 
(?<firstname>[a-z-A-Z\ ]+)\n
(?<title>[a-zA-Z\.\ ]+)\n?
(?<company>[a-zA-Zäöü\.\ ]+)?\n
(?<street>[a-zA-Zäöü]+)\ (?<housenumber>[0-9]+)\n?
(?<postfach>Postfach [0-9]+)?\n
(?<zip>[0-9]+)\ (?<place>[a-zA-Zäöü]+)

这是我要解析的字符串:

Smith John
Dr.
Foobar AG
Smithstrasse 1
Postfach 1
6500 Bellinzona 

有了这个正则表达式,它将完美地运作。但之前,\n组之前的street可以为空,而不是组\n之前的company。问题在于,字符串中没有公司。以前版本的结果:最后一个字符的整个街道都在组company中,组street中街道的最后一个字符(我使用regex101进行测试)。虽然组company可以为空,但看起来像'#34;强迫&#34;成为字符串的一部分绝对不是我想要的东西。

那是我的问题所在。正则表达式如何在后台完全正常工作?我认为正则表达式试图从字符串中可能包含的所有可能的分组中获取最佳解决方案。但我不知道为什么这个解决方案是最好的解决方案。

这是指向regex101的链接,您可以在其中查看之前的行为:https://regex101.com/r/OmuPBn/1

0 个答案:

没有答案