首先请看我的字符串:
$a = "[ child : parent ]";
我怎样才能检测到模式是:
[(optional space)word or character(optional space) : (optional space)word or character(optional space)]
您可以在 PHP 中按如下方式捕获:
你的正则表达式是/\[ *\w+ *: *\w+ *]/
您将编写如下所示的代码以查看它是否匹配。
if (preg_match('/regex/', $string)) {
// do things
}
正则表达式的解释
\
左括号前
有一个反斜杠 ( ),因为[
在正则表达式中具有特殊含义。反斜杠防止使用其特殊含义。*
) 匹配前一个字符表达式的 0 个或多个。在这种情况下,它匹配 0 个或多个空格。如果您改为使用表达式\s*
,它将匹配 0 个或更多空白字符(空格、制表符、换行符)。最后,如果您希望它匹配前一个字符的 0 或 1,您可以使用?
代替*
.+
) 匹配前一个字符表达式的 1 个或多个。字符表达式匹配字母、\w
数字或下划线。如果您不希望下划线匹配,则应改为使用字符类。例如,您可以使用[A-Za-z0-9]
.您可以在http://www.regular-expressions.info和http://www.regular-expressions.info/php.html找到更多关于正则表达式的信息
使用这个正则表达式 \[\s*\w+\s*:\s*\w+\s*\]
我可能会这样做
preg_match('/^\[\s?\w+\s+:\s+\w+\s?\]$/', $string)
从您的示例文本中,我会说您的意思是人类词而不是\w
正则表达式词
preg_match('/\[ ?([a-z]+) ?: ?([a-z]+) ?\]/i', $a, $matches);
解释演示:http ://regex101.com/r/hB2oV9
$matches
将保存两个值,用var_dump($matches);