【发布时间】:2014-10-21 17:10:17
【问题描述】:
我有以下正则表达式,它将在各种情况下捕获引号标签的开头和作者。
我无法让它与 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 风格。
【问题讨论】:
-
预期的输出究竟是什么?
-
由于方括号是用来分隔字符类的,写
[^link=|pid=]这样的东西没有任何意义。 -
子表达式
[^link=|pid=]+匹配“link=|pid”之外的一个或多个连续字符。你实际上想匹配什么,除此之外,你想捕捉什么? -
预期的输出是 [quote='User Name']Test[/quote]
-
当 'author' 属性存在时,你能依赖它成为第一个吗?另外,是否需要对标签格式进行全面验证?