当前位置: 首页 > 知识库问答 >
问题:

正则表达式:匹配可选的URI参数

徐皓君
2023-03-14

获取给定的URI,如下所示:

one/two/three

如何在斜线之间匹配捕获组中的每个角色?这可以通过以下方法完成:

(.+)\/(.+)\/(.+)

这给了我三个组,其中:

$1 = one
$2 = two
$3 = three

我遇到的麻烦是让一个捕获组可选。我认为这将工作,认为我可以使每组可选(匹配零或更多):

(.+)?\/(.+)?\/(.+)?

有没有一种方法,可以使用Regex或PHP选择性地匹配上述URI的onetwotwo

共有1个答案

商曦
2023-03-14

您可以使用以下正则表达式

代码>^(?:(. ?))?(?:\/(. ?))?(?:\/(. ?))?$

这将使所有组都是可选的。主要的一点是将非捕获组与一起使用 量词和 模式以将每个部分捕获到单独的组中,以便您以后可以使用$n引用它们。

参见示例。

示例代码:

$re = "/^(?:(.+?))?(?:\\/(.+?))?(?:\\/(.+?))?$/m"; 
$str = "one/two/three\none/two\none\n\n"; 
preg_match_all($re, $str, $matches);

 类似资料:
  • 我试图写一个正则表达式来匹配三个组,在三个组中,我希望有一个组是可选的。 正则表达式: 它匹配以下内容: 但是,不是在下面。 如何修改正则表达式,使其匹配两个组。如果第一条消息是三个组。 修复 测试 消息 如果是第二条消息,只有两组 < li >修复 < li >消息 消息

  • 我正在尝试匹配时间格式。时间可以用可选的小时、分钟和毫秒写入。唯一需要的值是秒。所以所有这些时间都写得正确,应该匹配。 我的正则表达式看起来像这样: 我希望每组对应正确的值。因此,组1应始终返回小时,组2应始终返回分钟,等等……我在Regex101中尝试了这一点,但正如您在这些结果中看到的,当没有小时时,组1总是优于组2。它与时间<code>11:12 如何确保每组始终对应正确的时间段?我可以以某

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 我们得到了一些这样的内容:

  • 当所有组都是可选的时,我在提取组时遇到了问题。 上下文(如果您愿意,可以跳到结尾):这是在将字符串与一堆正则表达式进行最佳匹配并查看哪个表达式具有最多组匹配的上下文中。 例如,我可能有一个潜在的格式; 但我希望用户打错字,或者不包含空格或其他东西。 所以我可以用绳子测试一下 并希望获得组 一个 光盘 1-1 G 而且,对于测试字符串 我想得到   DE   克 下面是我的正则表达式,用于匹配以下可

  • 问题内容: 我正在使用模块中的函数来匹配某些东西,并且一切正常。 现在,我需要找出我有多少场比赛。是否可以不两次遍历迭代器?(先找出计数然后是真正的迭代) 一些代码: 一切正常,我只需要在循环之前获取匹配数即可。 问题答案: 如果您知道需要所有匹配项,则可以使用该功能。它将返回所有匹配项的列表。然后,您可以只进行匹配次数。