Php BBCode-正则表达式只匹配属性上的无引号或两个引号

Php BBCode-正则表达式只匹配属性上的无引号或两个引号,php,regex,bbcode,Php,Regex,Bbcode,我正在尝试构建一个与BBCode属性匹配的正则表达式。我希望它匹配没有引号的属性(attr=value),也匹配它们(attr=“value”),但如果只有一个标记(attr=“value或attr=value”),则不匹配 我使用这个regex/\[size\=((?=”)(.*?)([^”]*)\](.*?\[\/size\]/is(用于大小标记)成功地找到了一个解决方案,但它将带引号和不带引号的属性的匹配放在不同的索引上。这里有一个方案: +-----------------------+

我正在尝试构建一个与BBCode属性匹配的正则表达式。我希望它匹配没有引号的属性(
attr=value
),也匹配它们(
attr=“value”
),但如果只有一个标记(
attr=“value
attr=value”
),则不匹配

我使用这个regex
/\[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解析器。就目前而言,它只允许在没有引号的情况下放置属性
。现在,这给它带来了很多限制,所以我添加了对引用属性的支持。问题是我不能破坏向后兼容性,所以我必须想出一些对这两种情况都有效的方法。

因为匹配第一个案例的组必须与匹配第二个案例的组不同,我不相信有任何方法可以让它们匹配到同一个索引/组

尽管如此,我们还是可以看到类似以下代码的工作方式:

attr = matches[1] or matches[2]

由于您可以确定这些元素中最多有1个是非空的,
逻辑起作用。

由于与第一个案例匹配的组必须与与与第二个案例匹配的组不同,因此我认为没有任何方法使它们与同一索引/组匹配

尽管如此,我们还是可以看到类似以下代码的工作方式:

attr = matches[1] or matches[2]

因为您可以确定这些元素中最多有1个是非空的,
逻辑工作。

@jonahbshop,剥离的问题是它带来了一些最初不支持它的限制。如果属性的任何值都有,例如,一个等号<代码>=,解析器会认为它是一个新属性。查尔斯,谢谢你的链接。@Jonahbshop,剥离的问题是它带来了一些最初不支持它的限制。如果属性的任何值都有,例如,一个等号<代码>=,解析器会认为它是一个新属性。Charles,谢谢你的链接。这就是我让它工作的方式,但是因为我直接对结果字符串进行替换,而不是对它们进行
ORing
操作,所以我只是将它们连接起来。忘了回复我的解决方案。这是我让它工作的方式,但是因为我直接对结果字符串进行替换,而不是对它们进行
ORing
操作,我只是将其连接起来。忘了回复我的解决方案。