Php Regex:如果在主题末尾,如何使子匹配可选

时间:2010-09-25 01:33:44

标签: php regex

$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

1 个答案:

答案 0 :(得分:2)

由于您使用|作为delimiter,因此您需要转义模式中显示的任何|(或者您可以将其更改为不具有'{'}的字符t出现在您的模式中,例如#。由于您在第二个代码块中引入了未转义的|,因此PCRE尝试将以下字符(以$开头)视为{ {3}},因此错误。

这应该有效:

$pattern = '#^(.*)?(\*[0-9a-zA-Z_-]{3,15})([^0-9a-zA-Z_-]+(.*)?|$)#i';