从标签的最后一次出现开始正则表达式
Start regex from the last occurrence of a tag
我正在尝试使用 REGEX 识别 bbcodes
内部文本。
我有以下文字:
Lorem ipsum dolor sit amet, [color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color] minim veniam.
目前我正在使用这种模式:
/\[([a-z0-9]+).+?\[\/\]/i
但它抓住了这个:
[color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color]
而不是这个:
[color=red]dolore magna aliqua[/color]
我正在考虑两种解决方案,但我不知道如何实现:
- 不允许标签内容中包含标签。然后,
[b]this [b] won't be allowed[/b]
;
- 从最后一次出现的标记开始模式。
感谢您的帮助,
JG
你的正则表达式找到最左边出现的 [
后跟 BBtag,然后 .+?
匹配除换行符之外的任何 1+ 个字符,尽可能少,但尽可能多最左边的 [/<CLOSE_TAG>]
.
您需要确保在通往结束标签的过程中不匹配开始标签:
\[([a-z0-9]+)[^\[]*(?:\[(?!\b)[^\[]*)*?\[\/\]
它几乎与 \[([a-z0-9]+)(?:(?!\[\b).)+?\[\/\]
相同,可能更具可读性,但效率较低。
详情:
\[
- 左括号
([a-z0-9]+)
- 第 1 组(标签名称):1+ 个字母数字符号
[^\[]*
- [
以外的零个或多个字符
(?:\[(?!\b)[^\[]*)*?
- 0+序列(越少越好)匹配
\[(?!\b)
- [
后面没有作为整个单词的第 1 组文本
[^\[]*
- [
以外的零个或多个字符
\[
- 一个 [
\/
- 一个/
</code> - 第 1 组文本</li>
<li><code>\]
- ]
.
我正在尝试使用 REGEX 识别 bbcodes
内部文本。
我有以下文字:
Lorem ipsum dolor sit amet, [color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color] minim veniam.
目前我正在使用这种模式:
/\[([a-z0-9]+).+?\[\/\]/i
但它抓住了这个:
[color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color]
而不是这个:
[color=red]dolore magna aliqua[/color]
我正在考虑两种解决方案,但我不知道如何实现:
- 不允许标签内容中包含标签。然后,
[b]this [b] won't be allowed[/b]
; - 从最后一次出现的标记开始模式。
感谢您的帮助,
JG
你的正则表达式找到最左边出现的 [
后跟 BBtag,然后 .+?
匹配除换行符之外的任何 1+ 个字符,尽可能少,但尽可能多最左边的 [/<CLOSE_TAG>]
.
您需要确保在通往结束标签的过程中不匹配开始标签:
\[([a-z0-9]+)[^\[]*(?:\[(?!\b)[^\[]*)*?\[\/\]
它几乎与 \[([a-z0-9]+)(?:(?!\[\b).)+?\[\/\]
相同,可能更具可读性,但效率较低。
详情:
\[
- 左括号([a-z0-9]+)
- 第 1 组(标签名称):1+ 个字母数字符号[^\[]*
-[
以外的零个或多个字符
(?:\[(?!\b)[^\[]*)*?
- 0+序列(越少越好)匹配\[(?!\b)
-[
后面没有作为整个单词的第 1 组文本[^\[]*
-[
以外的零个或多个字符
\[
- 一个[
\/
- 一个/
</code> - 第 1 组文本</li> <li><code>\]
-]
.