我正在用PHP编写自定义bb代码脚本。我希望能够为用户提供添加不同参数的选项,例如宽度,高度和与img标签对齐。如果你不想改变那些属性我的脚本工作正常...一旦我有正则表达式,我将如何访问这些参数,因为它们不会总是对应相同的数字($ 2),因为它们是可选的?
"'\[img\](.*?)\[\/img\]'is"
像这样的bbcode看起来像这样:
[img width=100 height=100 align=right]thelinktotheimage[/img]
更新:我试图为此编写自己的正则表达式...基本上应该只允许宽度,高度或对齐作为属性,=符号,然后是数字字符或字符串模式左,右,中间,顶部或底部作为他们的价值观。出于某种原因,正则表达式与我的测试字符串不匹配。我有一种感觉,我非常接近...我希望。有什么想法吗?
^\[img(((width|height|align)=(([0-9]+)|(left|right|middle|top|bottom)) )+)\](.*?)\[\/img\]$
答案 0 :(得分:0)
因此,你可以获得很少的preg_match_all()函数,但是如果参数更多,它会变得更糟。你可以做的是例如使用这样的东西:
<?php
$bb = "[img width=100 height=100 align=right]thelinktotheimage[/img]<br />[img width=100 height=100 align=right]thelinktotheimage[/img]";
preg_match_all("'\[img(.{0,40})\](.*?)\[\/img\]'is", $bb, $matches);
print_r($matches);
?>
答案 1 :(得分:0)
用正则表达式解析完全任意数量的属性是很困难的,但如果你最多只有3个(或其他一些相当小的数字),你可以使用这样的东西:
\[img (?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?(?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?(?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?].+\[\/img]
这是一个显示您将获得的匹配的链接。如您所见,奇数编号的捕获是属性名称,而evens是值。如果您不使用它们,请删除双引号。 http://regex101.com/r/bN1jT3