Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何简化我的正则表达式_Regex_Url_Routes - Fatal编程技术网

Regex 如何简化我的正则表达式

Regex 如何简化我的正则表达式,regex,url,routes,Regex,Url,Routes,如何简化我的正则表达式以获取包含以下内容的URL: de-[.+] em-[.+] empresa-[.+] area-[.+] 例如,以任何顺序 /home/de-xpto/area-xpto/empresa-xpto 或 或 等等 还有一个正则表达式,如果列表中没有任何一个,我可以识别它 \/home\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([

如何简化我的正则表达式以获取包含以下内容的URL:

de-[.+]
em-[.+]
empresa-[.+]
area-[.+]
例如,以任何顺序

/home/de-xpto/area-xpto/empresa-xpto

等等

还有一个正则表达式,如果列表中没有任何一个,我可以识别它

\/home\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))

谢谢

您的正则表达式包含带有
|
交替符号的字符类,这是错误的。必须使用分组构造
(…)
来匹配可选的字符序列

也就是说,你很可能需要

\/home(?:\/(?:de|em(?:presa)?|area)-[^\/]+)+
这是一本书

  • \/home
    -匹配
    /home
  • (?:\/(?:de | em(?:presa)?| area)-[^\/]+)+
    -匹配一个或多个以下序列:
    • \/
      -一个
      /
      符号
    • (?:de|em(?:presa)?area)
      -要么
      de
      要么
      em
      要么
      empresa
      要么
      area
    • -
      -文字
      -
    • [^\/]+
      -1+除
      /

如果您需要将这些URL作为完整字符串进行匹配,请添加
^
(在开始处)和
$
(在结尾处)锚定。

可能?Wiktor,谢谢。可以告诉我如何制作相同的正则表达式,但现在,它不包含列表吗?我试着把^放进去,但不起作用。你说没有列表是什么意思?在正则表达式中没有列表这样的概念。括号内有一组备选方案。这不是您要求的吗?例如:正则表达式匹配此:/home/de xpto/em xpto。现在我想要一个匹配,如果有一个不包含在列表中[de | em | empresa |等]。。。示例:/home/de xpto/xpto/area xptoTo要匹配不等于其他文本的文本,请使用类似
(?:(?!de|em(?:persa)?)的标记*
\/home\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))
\/home(?:\/(?:de|em(?:presa)?|area)-[^\/]+)+