1

我已经研究这个问题好几天了,它开始让我发疯。我很喜欢使用正则表达式,但这件事似乎让我无法理解。
如果它们存在,我需要在一组字符之间匹配一个字符串,否则它应该匹配到行尾。

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

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

$str1 输出:“内容@description”

$str2 输出:“内容”

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

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

4

1 回答 1

0

你可以写:

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

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

或者简单地说:

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

(意思是“一个冒号,后跟零个或多个不在@:*”中的字符)。

于 2012-07-26T17:45:05.960 回答