PHP正则表达式在字符之间或字符串结尾处选择

时间:2012-07-26 17:39:24

标签: php regex

我已经在这个问题上工作了好几天,它开始让我发疯。我很习惯使用正则表达式,但这一件事似乎正在逃避我 我需要在一组字符之间匹配一个字符串(如果它们存在),否则它应匹配该行的结尾。

例如: 我只想从以下示例中获取“内容”:

$str1="title:content @description"
$str2="title:content"
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str1,$content);
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str2,$content);

$ str1输出:“content @description”

$ str2输出:“content”

注意:字符串可能有不同的顺序,或者可能没有特殊字符(@,:或*),或者它们可能有一个字符串,因此没有“字符串结尾”字符,除了“行尾“。

我已经尝试了我能想到的所有组合,使整个“或”声明成为条件,并阅读大量有类似但不完全相同的帖子的帖子。

1 个答案:

答案 0 :(得分:0)

你可以写:

preg_match("/:(.*?)(?:[@:*]|$)/", $str1, $content);

(请注意,匹配使用@:*| 字符串结尾之一结束;您的版本具有[@:*]可选,但强制使用字符串结尾。)

或简单地说:

preg_match("/:([^@:*]*)/", $str1, $content);

(表示“冒号,后跟零个或多个不在@:*中的字符”。