首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在脚本中添加什么regex,允许用户在bb代码中包含可选参数?

问我可以在脚本中添加什么regex,允许用户在bb代码中包含可选参数?
EN

Stack Overflow用户
提问于 2014-03-06 01:23:55
回答 2查看 87关注 0票数 1

我正在用PHP编写一个自定义bb代码脚本。我想让用户可以选择添加不同的参数,如宽度,高度和对齐img标签。如果你不想改变那些属性的话我的脚本很好用..。一旦正则表达式就位,我将如何访问这些参数,因为它们并不总是对应于相同的数字($2),因为它们是可选的。

代码语言:javascript
复制
"'\[img\](.*?)\[\/img\]'is"

像这样的bbcode看起来应该是这样的:

代码语言:javascript
复制
[img width=100 height=100 align=right]thelinktotheimage[/img]

更新:我试着为这个写我自己的regex .基本上,应该只允许宽度、高度或对齐作为属性、=符号,然后允许数字字符或字符串模式(左、右、中、顶或底)作为它们的值。由于某些原因,regex与我的测试字符串不匹配。我有种感觉我很亲密..。我希望如此。有什么想法吗?

代码语言:javascript
复制
^\[img(((width|height|align)=(([0-9]+)|(left|right|middle|top|bottom)) )+)\](.*?)\[\/img\]$
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 02:15:01

要用regex解析完全任意数量的属性是很困难的,但是如果您的最大值为3(或其他一些相当小的数字),您可以使用以下内容:

代码语言:javascript
复制
\[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

票数 0
EN

Stack Overflow用户

发布于 2014-03-06 01:54:32

因此,您可以得到很少的preg_match_all()函数,但是随着参数的增加,情况会变得更糟。你能做的就是使用这样的东西:

代码语言:javascript
复制
<?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);
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22212975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档