我正在尝试构建一个匹配 BBCode 属性的正则表达式。我希望它匹配不带引号 ( attr=value
) 的属性以及带有引号 ( ) 的属性attr="value"
,但如果只有一个标记 (attr="value
或attr=value"
) 则不匹配。
我设法接近使用此正则表达式/\[size\=((?=")"(.*?)"|([^"]*))\](.*?)\[\/size\]/is
(用于大小标签)的解决方案,使用前瞻,但它将引用和未引用属性的匹配放在不同的索引上。这是一个方案:
+-----------------------+----------+----------+----------+----------+
| Input | Match #1 | Match #2 | Match #3 | Match #4 |
+-----------------------+----------+----------+----------+----------+
| [size="7"]txt[/size] | "7" | 7 | | txt |
+-----------------------+----------+----------+----------+----------+
| [size=7]txt[/size] | 7 | | 7 | txt |
+-----------------------+----------+----------+----------+----------+
虽然这不是一个主要问题,但我想知道是否有任何 wya 可以将它们匹配到相同的索引。
背景资料:
基本上,我正在努力改进 BBCode 解析器。至于现在,它只允许放置不带引号的属性"
。现在,这给它带来了很多限制,所以我正在添加对引用属性的支持。问题是我不能打破向后兼容性,所以我必须想出适用于这两种情况的东西。