有人可以解释一下这种模式的含义。
preg_match(/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/','21st March 2006','$matches);
如果我错了,请纠正我:
^ = beginning of the line
d{1,2} = digit with minimum 1 and maximum 2 digits
([a-z]+) = one or more letters from a-z
(?:s*)S = no idea...
(?= = no idea...
200[0-9] = a number, starting with 200 and ending with a number (0-9)
有人可以填写此列表吗?
答案 0 :(得分:2)
regular-exressions.info是非常有用的资源。
/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/
(?:regex)
是非捕获括号;它们在您的示例中不是很有用,但可用于表达(?:bar)+
之类的内容,表示1个或更多bar
s
(?=regex)
做了一个积极的预测,但匹配的位置不是内容。因此,您的示例中的(?=200[0-9])
仅使正则表达式与前十年的日期相匹配,没有匹配年份本身。
答案 1 :(得分:2)
这是一个很好的图表,由strfriend提供:
但我认为你可能用反斜杠表示^(\d{1,2}([a-z]+))(?:\s*)\S (?=200[0-9])
,这会产生this diagram:
也就是说,此正则表达式匹配字符串的开头,后跟一个或两个数字,一个或多个小写字母,零个或多个空白字符,一个非空白字符和一个空格。此外,所有这些都必须在2000年到2009年之间跟随一个数字,尽管这个数字实际上并不与正则表达式相匹配 - 它只是一个前瞻性的断言。此外,前导数字和字母都会被捕获到$matches[1]
,而只有$matches[2]
中的字母。
有关PHP的PCRE regexp语法的更多信息,请参阅http://php.net/manual/en/pcre.pattern.php