我一直试图让这个正则表达式工作。假设解析URL,如果找到字符串'_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_]+)(\/.*)
请帮帮我!在此先感谢!!!
答案 0 :(得分:0)
只需匹配_skipThis
,如果找到则返回 false 。
if (strpos($theString, '_skipThis') === false) {
// perform preg_match
} else
return false;
(当然有一个正则表达式。假设_skipThis
仅出现在第一个/
之前,
return preg_match('|^([^/]+)(?<!_skipThis)(/.*)$|', $theString);
// ------- -----
// $1 -------------- $2
// Make sure it is *not* preceded '_skipThis'
否则,如果需要避免出现在任何地方的_skipThis
,
return preg_match('|^(?!.*_skipThis)([^/]+)(/.*)$|', $theString);
// ---------------
// Make sure '_skipThis' is not found anywhere.
答案 1 :(得分:0)
试试这个:
$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