1

首先请看我的字符串:

$a = "[ child : parent ]";

我怎样才能检测到模式是:

 [(optional space)word or character(optional space) : (optional space)word or character(optional space)]
4

5 回答 5

2

您可以在 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.infohttp://www.regular-expressions.info/php.html找到更多关于正则表达式的信息

于 2013-02-06T14:26:11.513 回答
1

我不确定 php 特定版本的正则表达式,但这应该可以工作:

\[ ?\w+ ? :  ?\w+ ?\]

是我过去用来查找所需模式的正则表达式的站点。

于 2013-02-06T14:24:20.707 回答
1

使用这个正则表达式 \[\s*\w+\s*:\s*\w+\s*\]

于 2013-02-06T14:25:23.253 回答
1

我可能会这样做

preg_match('/^\[\s?\w+\s+:\s+\w+\s?\]$/', $string)

于 2013-02-06T14:27:03.713 回答
1

从您的示例文本中,我会说您的意思是人类词而不是\w 正则表达式词

preg_match('/\[ ?([a-z]+) ?: ?([a-z]+) ?\]/i', $a, $matches);

解释演示:http ://regex101.com/r/hB2oV9

$matches将保存两个值,用var_dump($matches);

于 2013-02-06T14:58:51.160 回答