正则表达式:仅在表达式

时间:2016-08-23 12:28:28

标签: regex regex-greedy

我试图只匹配"的第一个实例:"在一行中可能有一次或多次出现的文本。

示例内容:

title: This is a title: This is a subtitle

所以我只想匹配":"在" title"

之后

我试过这个:

/(: ?)/

但它仍与所有人相匹配。

我知道它需要非贪心使用?但到目前为止,似乎只是非贪婪,同时仍然匹配给定行中的多次出现。

感谢您的帮助:)

更新20160823 @ 13:50

以下是我正在解析的内容的示例:

root
    parent
        title: The title with (: ) to be ignored
        text: A line of text

所以":"很可能会在第一个":"之前加上缩进和单词。可能是什么。

解决方案@ 27/01/2017

所以这似乎有效:

$text = "    title: Page: Website - Tagline";
preg_match("~^(?:[\t ]+)*(?:([\w]+)(?:: ){1})([\s\S]+)$~", $text, $matches);

$matches[1]; // title
$matches[2]; // Page: Website - Tagline

1 个答案:

答案 0 :(得分:0)

试试这个:

^[^:]*(:).*

所以^标记了行的开头,

[^:] * - 看起来直到它看到冒号

(:) - 匹配行

中的第一个冒号

。*(可选) - 行的其余部分