需要正则表达式的帮助

时间:2014-06-10 04:58:45

标签: php regex

我正在尝试在PHP中构建一个正则表达式,以提取下面的示例字符串的第一部分。尖括号表示必需部分,方括号表示可选部分,有三种输入可能(括号不包括在输入中)。

  • <Rua Olavo Bilac>
  • <Rua Olavo Bilac>[ - de 123...]
  • <Rua Olavo Bilac>[ - até ...]

(请注意所需部分可能有破折号)

我试过了:

/(.*?)( - (de|até){1,1}.*)?/i(第一组应该抓住我需要的,不合理的)

我也试过了几次没有运气的修改。我可能在这里做了一些混乱,特别是与组和数量修饰符。据我所知:

  1. 第一组会抓住任何角色,不明确地
  2. 根据?修饰符选择的第二组,\s-\s后面会有两个单词deaté中的一个恰好一次,然后是任何字符,直到这条线的终点。
  3. 我结束了用strpos和substr替换preg_match_all,测试了每种可能性。它确实有效,但我需要了解我对正则表达式方法的错误。

1 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式(请参阅demo):

^.*(?= *-(?!.*-))|^.*

它是如何运作的?

  1. 我们匹配|
  2. 两侧的两种字符串
  3. 在左侧,从字符串的头部(由^断言锚定),点星.*会占用任何字符直到前瞻{{1}的地方}断言接下来是可选空格字符(?= *-(?!.*-))和短划线*,后面没有(负前瞻)更多字符和破折号。
  4. -的右侧,我们匹配任何内容。
  5. 这假设您是逐行检查字符串。如果情况并非如此,请告诉我们。

    示例代码

    |