我正在用PHP编写一个自定义bb代码脚本。我想让用户可以选择添加不同的参数,如宽度,高度和对齐img标签。如果你不想改变那些属性的话我的脚本很好用..。一旦正则表达式就位,我将如何访问这些参数,因为它们并不总是对应于相同的数字($2),因为它们是可选的。
"'\[img\](.*?)\[\/img\]'is"像这样的bbcode看起来应该是这样的:
[img width=100 height=100 align=right]thelinktotheimage[/img]更新:我试着为这个写我自己的regex .基本上,应该只允许宽度、高度或对齐作为属性、=符号,然后允许数字字符或字符串模式(左、右、中、顶或底)作为它们的值。由于某些原因,regex与我的测试字符串不匹配。我有种感觉我很亲密..。我希望如此。有什么想法吗?
^\[img(((width|height|align)=(([0-9]+)|(left|right|middle|top|bottom)) )+)\](.*?)\[\/img\]$发布于 2014-03-06 02:15:01
要用regex解析完全任意数量的属性是很困难的,但是如果您的最大值为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
发布于 2014-03-06 01:54:32
因此,您可以得到很少的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);
?>https://stackoverflow.com/questions/22212975
复制相似问题