Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Php 使用正则表达式检测字符串是否存在_Php_Regex - Fatal编程技术网

Php 使用正则表达式检测字符串是否存在

Php 使用正则表达式检测字符串是否存在,php,regex,Php,Regex,我需要使用PHP的preg_match()和Regex来检测以下条件: 如果URL路径是以下路径之一: 产品/新项目 新项目/产品 新项目/产品/品牌名称 做点什么 我似乎不知道如何检查a字符串是否存在于单词products之前或之后。我能得到的最接近的结果是: if (preg_match("([a-zA-Z0-9_ ]+)\/products\/([a-zA-Z0-9_ ]+)", $url_path)) { // Do something 有人知道如何检查字符串的第一部分是否存在

我需要使用PHP的
preg_match()
和Regex来检测以下条件:

如果URL路径是以下路径之一:

  • 产品/新项目
  • 新项目/产品
  • 新项目/产品/品牌名称
做点什么

我似乎不知道如何检查a字符串是否存在于单词products之前或之后。我能得到的最接近的结果是:

if (preg_match("([a-zA-Z0-9_ ]+)\/products\/([a-zA-Z0-9_ ]+)", $url_path)) {
  // Do something

有人知道如何检查字符串的第一部分是否存在于一个正则表达式行中吗?

您可以对最后一个项目使用可选组的替换,使
/
成为可选组的一部分

如果只查找匹配项,则可以忽略捕获组

(?:[a-zA-Z0-9_ ]+/products(?:/[a-zA-Z0-9_ ]+)?|products/[a-zA-Z0-9_ ]+)
解释

  • (?:
    非catpuring组
    • [a-zA-Z0-9\]+/products
      匹配字符类中列出的1+倍,
      /
      后跟products
    • (?:/[a-zA-Z0-9_775;]+)?
      可以选择匹配
      /
      和字符类中列出的内容
    • |
    • products/[a-zA-Z0-9\]+
      匹配
      products/
      ,匹配所列内容的1倍以上
  • 关闭组


请注意,
[a-zA-Z0-9\]+
可能会缩短为
[\w]+

,您可以使用替换

([\w ]+)\/products|products\/([\w ]+)

注意:-我不确定您是如何使用匹配值的,如果您不需要对任何特定值进行反向引用,那么您可以避免捕获组,即

 [\w ]+\/products|products\/[\w ]+

你在找这样的东西吗?你可以使用alternation
([\w\u]+)\/products\/([\w\u]+)
或@WiktorStribi\380ew,但这将匹配
产品
tooThis很奇怪,当我用“产品”以外的词实现它时(根据我的网站要求),它只检测第一个实例,例如@MeltingDog您必须在regex101@MeltingDog的右上角启用全局标志
g
,但一定不要在PHP代码中使用任何
g
修饰符。