Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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 Preg_match:尝试匹配字符串中不存在子字符串的字符串_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

PHP Preg_match:尝试匹配字符串中不存在子字符串的字符串

PHP Preg_match:尝试匹配字符串中不存在子字符串的字符串,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,我一直在努力让这个正则表达式工作。假设要解析URL,如果找到字符串“\u skipThis”,则与字符串不匹配。此外,还需要反向引用。例如: String 1: a_particular_part_of_string/a/b/c/d/e/f Result: preg_match should return true Backreference: $1 -> a_particular_part_of_string, $2 -> /a/b/c/d/e/f String 2: a_par

我一直在努力让这个正则表达式工作。假设要解析URL,如果找到字符串“\u skipThis”,则与字符串不匹配。此外,还需要反向引用。例如:

String 1: a_particular_part_of_string/a/b/c/d/e/f
Result: preg_match should return true
Backreference: $1 -> a_particular_part_of_string, $2 -> /a/b/c/d/e/f

String 2: a_particular_part_of_string_skipThis/a/b/c/d/e/f
Result: preg_match should return false.
Backreference: nothing here.
我试过下面的正则表达式

reg1 = ([a-zA-Z0-9_]+)(\/.*)
reg2 = ([a-zA-Z0-9]+(?!_skipThis))(\/.*)
reg3 = ((?!_skipThis).*)(\/.*)
reg4 = ((?!_skipThis)[a-zA-Z0-9_]+)(\/.*)

请帮帮我!提前感谢

只需匹配
\u跳过此
,如果找到则返回false

 if (strpos($theString, '_skipThis') === false) {
        // perform preg_match
 } else 
        return false;
(当然,这里有一个正则表达式。假设
\u skipt这个
只出现在第一个
/
之前

 return preg_match('|^([^/]+)(?<!_skipThis)(/.*)$|', $theString); 
 //                   -------              -----
 //                     $1   --------------  $2
 //                          Make sure it is *not* preceded '_skipThis'
试试这个:

$str1 = 'a_particular_part_of_string/a/b/c/d/e/f'; //1
$str2 = 'a_particular_part_of_string_skipThis/a/b/c/d/e/f'; //0
$keep = 'a_particular_part_of_string';
$skip = '_skipThis';

$m = array();
if(preg_match("/($keep)(?!$skip)(.*)$/", $str1, $m))
    var_dump($m);
else
    echo "Not found\n";

$m = array();
if(preg_match("/($keep)(?!$skip)(.*)$/", $str2, $m))
    var_dump($m);
else
    echo "Not found\n";
输出:

array(3) {
  [0]=>
  string(39) "a_particular_part_of_string/a/b/c/d/e/f"
  [1]=>
  string(27) "a_particular_part_of_string"
  [2]=>
  string(12) "/a/b/c/d/e/f"
}

Not found

非常感谢您的帮助。字符串的“特定部分”必须始终保持不同。谢谢!
array(3) {
  [0]=>
  string(39) "a_particular_part_of_string/a/b/c/d/e/f"
  [1]=>
  string(27) "a_particular_part_of_string"
  [2]=>
  string(12) "/a/b/c/d/e/f"
}

Not found