正则表达式在分隔字符串后查找所有文本

时间:2011-04-01 20:07:15

标签: php regex

我有一些内容包含

形式的令牌字符串
$string_text = '[widget_abc]This is some text. This is some text, etc...';

我想在第一个']'字符之后拉出所有文字

所以我在这个例子中寻找的返回值是:

This is some text. This is some text, etc...

5 个答案:

答案 0 :(得分:17)

preg_match("/^.+?\](.+)$/is" , $string_text, $match);
echo trim($match[1]);

修改

根据作者的要求 - 补充说明:

preg_match(param1,param2,param3)是一个允许您匹配正在寻找的正则表达式的单个案例场景的函数

param1 =“/^.+?](.+?)$/is”

“//”是你在param1

中正则表达式外面的内容

最后的i代表不区分大小写(它不关心你的字母是'a'还是'A')

s - 允许你的脚本遍历多行

^ - 从字符串

的开头开始检查

$ - 一路走到字符串

的末尾

。 - 代表任何角色

。+ - 至少有一个或多个任何字符

。+? - 在你到达之前,至少还有一个角色

。+?] - 至少有一个或多个任何字符,直到达到](之前有反斜杠),因为它代表正则表达式中的某些东西 - 查找它)

(。+)$ - 捕获]之后的所有内容并将其作为param3中定义的数组中的单独元素存储

param2 =您创建的字符串。

我试图简化解释,我可能会离开,但我认为我在大多数时候都是对的。

答案 1 :(得分:3)

正则表达式(?<=]).*将解决此问题,如果您可以保证该行上没有其他方括号。在PHP中,代码将是:

if (preg_match('/(?<=\]).*/', $input, $group)) {
    $match = $group[0];
}

这会将[widget_abc]This is some text. This is some text, etc...转换为This is some text. This is some text, etc...。它匹配]之后的所有内容。

答案 2 :(得分:1)

$output = preg_replace('/^[^\]]*\]/', '', $string_text);

答案 3 :(得分:1)

为什么要在这里使用正则表达式有什么特别的原因吗?

echo substr(strstr($string_text, ']'), 1);

答案 4 :(得分:0)

对于这个实例,正则表达式肯定是过度的。

这是一个很好的单行:

list(, $result) = explode(']', $inputText, 2);

它完成了这项工作,并且比使用正则表达式便宜。