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

preg_match命名子模式-可选键

施子民
2023-03-14

现在我努力了几个小时,但现在我承认我被卡住了。

我试图匹配一个简单框架的url模式

$url = 'controller';
preg_match('/(?P<controller>\w+)/', $url, $matches);

这适用于没有斜杠的页面,但我想用可选键匹配像controller/action这样的URL

$url = 'controller/action';
preg_match('/(?P<controller>(?P<action>)?\w+)/', $url, $matches);

问题就在这里。我不知道如何使前面有斜杠的“action”键成为可选键。

共有1个答案

田鸿彩
2023-03-14

试试看

preg_match('/(?P<controller>\w+)(?P<action>\/\w+)?/', $url, $matches);

你必须匹配第一部分(?P

如果不想在捕获的零件中使用斜杠,请在周围放置第二个可选组,并将斜杠从捕获组移动到可选组:

preg_match('/(?P<controller>\w+)(?:\/(?P<action>\w+))?/', $url, $matches);

?开头的组是一个非捕获组。

 类似资料:
  • 我正在做一些正则表达式在php和匹配使用preg_match(); 我有一个文本,可能看起来像这样: 我的目标是选择“div”标记中包含的“img”标记(包括“div”标记),或者如果没有包含在div中,则只选择“img”。在每种情况下,我还希望捕获“img”标记的src属性中包含的地址。 这是我使用的模式: 它对于“div”封闭的图像非常有效,但是对于无div的图像,我得到了捕获子模式的奇怪结果

  • 命名模式的目标是将方法的调用,请求或者操作封装到一个单独的对象中,给我们酌情执行同时参数化和传递方法调用的能力.另外,它使得我们能将对象从实现了行为的对象对这些行为的调用进行解耦,为我们带来了换出具体的对象这一更深程度的整体灵活性. 具体类是对基于类的编程语言的最好解释,并且同抽象类的理念联系紧密.抽象类定义了一个接口,但并不需要提供对它的所有成员函数的实现.它扮演着驱动其它类的基类角色.被驱动类

  • 在这一节中,我们将探索JavaScript中关于命名空间的模式。命名空间可被看作位于一个唯一标识符下的代码单元的逻辑组合。标识符可以被很多命名空间引用,每一个命名空间本身可以包含一个分支的嵌套命名空间(或子命名空间)。 在应用开发过程中,出于很多原因,我们都要使用命名空间。在JavaScript中,它们帮助我们避免在全局空间中于其他对象或者变量出现冲突。它们对于在代码库中组织功能块也非常有用,这样

  • 问题内容: 在PHP 4/5中是否可以在调用时指定一个命名的可选参数,从而跳过您不想指定的参数(例如在python中)? 就像是: 谢谢 问题答案: 不,这是不可能的:如果要传递第三个参数,则必须传递第二个参数。并且命名参数也不可能。 一种“解决方案”是只使用一个参数,一个数组并始终传递它……但不要总是在其中定义所有内容。 例如 : 并这样称呼: 将获得以下输出: 但是我真的不喜欢这个解决方案:

  • 问题内容: 最初使我不愿在代码中加入太多可选绑定的一件事是添加了更多的变量名。例如,我通常会写: 因为替代方案似乎有些混乱: 那是很多香蕉。我见过人们使用诸如新变量名之类的东西(在较大的代码块中可能很难看懂),但是我想知道是否存在一种普遍认可的变量名样式标准可以与可选绑定?谢谢阅读。 问题答案: 只需使用相同的名称: 不要使用匈牙利符号-如果您使用的是未包装的可选内容,则编译器会抱怨。

  • 我有一个有组的模式。这些组都是可选的。 完整的posible模式是: 但也可以看起来像这样 不可能在组中获得限定词,例如(组A不可能' = ')。 所以我尝试了这些正则表达式: 问题: 如果缺少组,则不匹配 具有“#”(E)的组包含第一个组“-”(F)<ul> 001.002 可编程逻辑控制器。003 M01.001 P1 测试-KF2-- 我的错是什么?