$text = 'something here *ls67 another thing'; // match
$text2 = 'something here *ls67. another thing'; // match
$text3 = 'something here another thing *ls67.'; // match
$text3 = 'something here another thing *ls67'; // doesn't match (and i need to match this)
$pattern = '|^(.*)?(\*[0-9a-zA-Z_-]{3,15})([^0-9a-zA-Z_-])+(.*)?$|i';
我尝试过这种模式,但会产生错误:
$pattern = '|^(.*)?(\*[0-9a-zA-Z_-]{3,15})([^0-9a-zA-Z_-]|$)+(.*)?$|i'; // Unknown modifier '$'
// and
$pattern = '|^(.*)?(\*[0-9a-zA-Z_-]{3,15})(([^0-9a-zA-Z_-])+|$)(.*)?$|i'; // same error
答案 0 :(得分:2)
由于您使用|
作为delimiter,因此您需要转义模式中显示的任何|
(或者您可以将其更改为不具有'{'}的字符t出现在您的模式中,例如#
。由于您在第二个代码块中引入了未转义的|
,因此PCRE尝试将以下字符(以$
开头)视为{ {3}},因此错误。
这应该有效:
$pattern = '#^(.*)?(\*[0-9a-zA-Z_-]{3,15})([^0-9a-zA-Z_-]+(.*)?|$)#i';