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