我正在尝试在PHP中构建一个正则表达式,以提取下面的示例字符串的第一部分。尖括号表示必需部分,方括号表示可选部分,有三种输入可能(括号不包括在输入中)。
<Rua Olavo Bilac>
<Rua Olavo Bilac>[ - de 123...]
<Rua Olavo Bilac>[ - até ...]
(请注意所需部分可能有破折号)
我试过了:
/(.*?)( - (de|até){1,1}.*)?/i
(第一组应该抓住我需要的,不合理的)
我也试过了几次没有运气的修改。我可能在这里做了一些混乱,特别是与组和数量修饰符。据我所知:
?
修饰符选择的第二组,\s-\s
后面会有两个单词de
或até
中的一个恰好一次,然后是任何字符,直到这条线的终点。我结束了用strpos和substr替换preg_match_all,测试了每种可能性。它确实有效,但我需要了解我对正则表达式方法的错误。
答案 0 :(得分:3)
您可以使用此正则表达式(请参阅demo):
^.*(?= *-(?!.*-))|^.*
它是如何运作的?
|
^
断言锚定),点星.*
会占用任何字符直到前瞻{{1}的地方}断言接下来是可选空格字符(?= *-(?!.*-))
和短划线*
,后面没有(负前瞻)更多字符和破折号。-
的右侧,我们匹配任何内容。这假设您是逐行检查字符串。如果情况并非如此,请告诉我们。
示例代码
|