PHP正则表达式在字符之间或字符串末尾进行选择


PHP Regular Expression select between characters or to end of string

我已经处理这个问题好几天了,它开始让我抓狂。我很乐意使用正则表达式,但这一点似乎让我无法理解。
如果一组字符存在,我需要在它们之间匹配一个字符串,否则它应该匹配到行的末尾。

例如:我只是想从下面的例子中获得"内容":

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

$str1输出:"content@description"

$str2输出:"内容"

注意:字符串可能有不同的顺序,也可能没有特殊的字符(@、:或*),或者它们可能有一个,所以除了"行尾"之外,没有常见的"字符串末尾"字符。

我已经尝试了我能想到的每一种组合,使整个"或"语句成为有条件的,并阅读了大量带有类似但不完全相同问题的帖子。

您可以编写:

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

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

或者简单地说:

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

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