php正则 非捕获元 "?:" "

2018-11-30  本文已影响15人  爱折腾的傻小子
?: 使用方法
$rule1 = "/(?:\w+)/";   // 匹配,则捕获整体,不会捕获子组
$rule2 = "/(\w+)/";     // 匹配,则捕获整体,并捕获子组

preg_match($rule1, "Hi", $matches);
preg_match($rule2, "Hi", $matches2);

/**
* array:1 [
*  0 => "Hi"
* ]
*/
dump($matches);

/**
* array:2 [
*  0 => "Hi"
*  1 => "Hi"
* ]
*/
dump($matches2);
字符 描述
(?:pattern) 匹 配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern) 正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000″ 中的 “Windows” ,但不能匹配 “Windows 3.1″ 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 “Windows 3.1″ 中的 “Windows”,但不能匹配 “Windows 2000″ 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
$str = "Windows 95 Windows 3.2 Windows NT";
$rule1 = "/Windows (?=95|98|NT|2000)/";   // (?=) 匹配

preg_match($rule1, $str, $matches);

/**
 * array:1 [
 *  0 => "Windows"
 * ]
 */
dump($matches);
$str = "Windows 95 Windows NT";
$rule1 = "/Windows (?!95|98|NT|2000)/";   // (?!)匹配
preg_match($rule1, $str, $matches);

/**
 * array:1 []
 */
dump($matches);

参考文档:
那瞬间Run2future | 链接:https://www.cnblogs.com/-run/articles/2371078.html

上一篇下一篇

猜你喜欢

热点阅读