正则表达式"匹配" (在两种情况下)

时间:2014-10-21 17:10:18

标签: php regex pcre

我有以下正则表达式,它将在不同情况下捕获引号标记和作者的开头。

我无法匹配link=pid=(请注意每个之前的空格)。

目前,我认为正在发生的事情是表达式是匹配单个字母,而不是上面的字符串。

\[(quote)\]?\s*(?:author)?=?(.[^link=|pid=]+[\w]*).*?\]

我正在测试正则表达式的字符串示例。我试图抓住两件事:“引用”(这就是我的1美元),然后是用户名(在各种情况下,它变成我的2美元)。

替换是[$ 1 = $ 2]。

我试图在关闭的方括号处停止表达式,因此我不必处理引号标记内容或最终的关闭标记。该表达式仅处理开始引号标记和属性。

[quote='User Name' pid='1082654' dateline='1411779439']Test[/quote]

使用上面的正则表达式,它将匹配:

[quote='User Name' pid]Test[/quote]

它应该匹配上面的所有内容,除了“pid”。以下是一个更完整的示例:http://regex101.com/r/iK2nO2/1

如何更清楚地定义捕获组应停止的位置?我在PHP中使用它,所以我认为PCRE的味道。

1 个答案:

答案 0 :(得分:1)

\[(quote)\]?\s*(?:author)?=?((?:(?!\s+link|\s+pid).)+).*?\]

试试这个。看看演示。

http://regex101.com/r/iK2nO2/3