Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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_String_Expression - Fatal编程技术网

Php 规范化正则表达式字符串

Php 规范化正则表达式字符串,php,string,expression,Php,String,Expression,我一直在读一本关于框架的书,叫做PRO-PHP-MVC。在书中创建了StringMethods类。代码如下所示 class StringMethods { private static $_delimiter = "#"; private function __construct() { // do nothing } private function __clone() { // do nothing }

我一直在读一本关于框架的书,叫做PRO-PHP-MVC。在书中创建了StringMethods类。代码如下所示

class StringMethods
{

private static $_delimiter = "#";

    private function __construct()
    {
        // do nothing
    }

    private function __clone()
    {
        // do nothing
    }

    private static function _normalize($pattern)
    {
        return self::$_delimiter.trim($pattern, self::$_delimiter).self::$_delimiter;
    }

    public static function getDelimiter()
    {
        return self::$_delimiter;
    }

    public static function setDelimiter($delimiter)
    {
        self::$_delimiter = $delimiter;
    }

    public static function match($string, $pattern)
    {
        preg_match_all(self::_normalize($pattern), $string, $matches, PREG_PATTERN_ORDER);
        if(!empty($matches[1]))
        {
            return $matches[1];
        }
        if(!empty($matches[0]))
        {
            return $matches[0];
        }

        return null;
    }

    public static function split($string, $pattern, $limit = null)
    {
        $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_NO_EMPTY;
        return preg_split(self::_normalize($pattern), $string, $limit, $flags);
    }

}
我的问题是$\u分隔符是什么?it服务器在$正常化功能中的用途是什么。这与我不太熟悉的正则表达式有关吗?还有一个事实,它是一种用于匹配字符串部分的自定义模式

书中解释如下:

$delimiter和_normalize()成员都用于正则表达式字符串的规范化,因此剩余的方法可以对它们进行操作,而无需首先检查或规范化它们。match()和split()方法的执行方式与preg_match_all()和preg_split()函数类似,但对正则表达式的形式化要求较低,并返回一组更可预测的结果。match()方法将返回第一个捕获的子字符串、整个子字符串匹配或null。split()方法将返回结果 在设置一些标志并规范化正则表达式之后,调用preg_split()函数


提前感谢您的帮助。

似乎normalize函数正在将模式分隔符手动添加到正则表达式模式中。代码正在使用散列“#”字符。normalize函数去掉可能已经是start和end的所有散列字符,然后再添加分隔符。正常模式分隔符是正斜杠“/”(即
/your[reg]ex[here]/

最终的结果是,无论你是否键入

your[reg]ex[here]


这两种模式都很好

似乎normalize函数正在将模式分隔符手动添加到正则表达式模式中。代码正在使用散列“#”字符。normalize函数去掉可能已经是start和end的所有散列字符,然后再添加分隔符。正常模式分隔符是正斜杠“/”(即
/your[reg]ex[here]/

最终的结果是,无论你是否键入

your[reg]ex[here]


这两种模式都很好

PHP中的PCRE函数都要求正则表达式以匹配的分隔符字符开头和结尾,以便在第二个分隔符之后放置可选的修饰符,例如

preg_match('/foo/i', $string);
这种情况下的分隔符是
/
字符,
i
是修饰符


您的类允许您用分隔符包装regexp,但不需要它
$delimiter
是它希望您用作分隔符的字符。
\u normalize
方法将在调用
preg\u match()
之前添加分隔符(如果它们不在那里)。它通过调用
trim($pattern,$self::$delimiter)
删除已经存在的分隔符,然后在每一端连接分隔符。

PHP中的PCRE函数都要求正则表达式以匹配的分隔符字符开头和结尾,因此,可选的修饰符可以放在第二个分隔符之后,例如

preg_match('/foo/i', $string);
这种情况下的分隔符是
/
字符,
i
是修饰符

您的类允许您用分隔符包装regexp,但不需要它
$delimiter
是它希望您用作分隔符的字符。
\u normalize
方法将在调用
preg\u match()
之前添加分隔符(如果它们不在那里)。它通过调用
trim($pattern,$self::$delimiter)
删除已经存在的分隔符,然后在每一端连接分隔符