我已经在这个问题上工作了好几天,它开始让我发疯。我很习惯使用正则表达式,但这一件事似乎正在逃避我 我需要在一组字符之间匹配一个字符串(如果它们存在),否则它应匹配该行的结尾。
例如: 我只想从以下示例中获取“内容”:
$str1="title:content @description"
$str2="title:content"
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str1,$content);
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str2,$content);
$ str1输出:“content @description”
$ str2输出:“content”
注意:字符串可能有不同的顺序,或者可能没有特殊字符(@,:或*),或者它们可能有一个字符串,因此没有“字符串结尾”字符,除了“行尾“。
我已经尝试了我能想到的所有组合,使整个“或”声明成为条件,并阅读大量有类似但不完全相同的帖子的帖子。
答案 0 :(得分:0)
你可以写:
preg_match("/:(.*?)(?:[@:*]|$)/", $str1, $content);
(请注意,匹配使用@:*
以|
或字符串结尾之一结束;您的版本具有[@:*]
可选,但强制使用字符串结尾。)
或简单地说:
preg_match("/:([^@:*]*)/", $str1, $content);
(表示“冒号,后跟零个或多个不在@:*
中的字符”。