我想解析一些使用正则表达式的输入。输入将在格式:REGEX解析模板回声
{someValue中:3}
目的是显示 'SOM'(无quotemarks)。
目前,我有:
'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?)\}~sU',
'replace' => "'.\$this->_get('\\1').'"
)
与我的模板系统的伟大工程,以呼应标准变量(即“someValue中”)。但是,我希望允许用户使用:分隔符来限制要输出的字符数(即{somevalue:3}将显示'som')。
我想:
'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?:(.*)/)\}~sU',
'replace' => "'.substr(\$this->_get('\\1'),0,\\2).'"
)
但这并没有工作。我真的不明白正则表达式,所以任何帮助将不胜感激。
我明白你的意思是关于原来的{string}不再工作。为了解决这个问题,我改变了它,这是数组中一个名为'echolimit'的新元素,所以现有的标签不受影响。我试过你的代码,但没有奏效。我将它改为:''echolimit'=> array( 'search'=>'〜\ {((?:'。$ this-> preg ['var']。')(?:\。)? :(。*))\}〜sU', 'replace'=>“'.substr(\ $ this - > _ get('\\ 1'),0,'\\ 2')。'” \t \t \t),'但现在它不显示任何东西(其他现有{标签}仍然完美)。 – Amo
substr应该将第一个参数作为字符串,第二个作为偏移量,第三个作为长度。您的版本具有使用$ this - > _ get('\\ 2')的第三个参数 - 但是$ this - > _ get()是一个函数,用于从要显示的模板中查找标记变量。在这种情况下,它应该具有的是在{stringtodisplay:limit}标记之后传递的数字 – Amo
由于我对您使用的模板引擎了解不多,因此我认为'$ this-> _get('\\ 1')'意味着从$ this-> preg()调用中获得第一个捕获组。由于我们添加了第二个捕获组来获取数字,因此我假设$ this - > _ get('\\ 2')会执行此操作。我知道我的代码嵌套捕获组,这是没有必要的。你可以试试这个吗? ''echolimit'=> array('search'=>'〜\ {((?:'。$ this-> preg ['var']。')(?:\。)?):([0-9 ] +)\}〜sU','replace'=>“'.substr(\ $ this - > _ get('\\ 1'),0,\ $ this - > _ get('\\ 2'))。'')' –