在过去的一个半小时里我一直在为此苦恼,但无法让它发挥作用。我正在尝试为 MemoQ 的正则表达式标记器创建正则表达式。
我有一系列这些:
zzz [xxx]yyy[/xxx] zzz
或
zzz [xxx]yyy[/xxx]
或
[xxx]yyy[/xxx] zzz
或
[xxx]yyy[/xxx]
例如:
文字文字文字[img height=32]logo_small.dds[/img]文字文字文字
我想将从第一个左括号到最后一个右括号的所有内容转换为单个标签,即:
[img height=32]logo_small.dds[/img]
请记住,无论括号内和两者之间的内容如何,表达式都应该有效。另请注意,不应转换之前和之后的其他文本。
您可以在这里找到正则表达式标记器的规则(无论如何应该是标准的): https://docs.memoq.com/current/en/Places/regular-expressions.html
我尝试了几种表达式,最后一个是:\[(.*?)\](.*?)\[(.*?)\]
感谢您的帮助,祝您有美好的一天!
下面的解决方案不匹配嵌套标签,这是因为OP不需要匹配嵌套标签。
如果你只需要匹配像
[...]...[...]
这样的字符串,你可以使用
\[[^][]*].*?\[[^][]*]
请参阅正则表达式演示。 详情:
\[
- 一个 [
字符[^][]*
- 除 [
和 ]
]
- 一个 ]
字符.*?
- 除换行符之外的任何零个或多个字符尽可能少\[[^][]*]
- [
字符 + 除 [
和 ]
+ ]
字符之外的零个或多个字符。更全面的表达 - 只会匹配配对的标签 - 看起来像
\[(\w+)\b[^][]*][\w\W]*?\[/\1\b[^][]*]
请参阅此正则表达式演示。这匹配
\[
- [
(\w+)
- 第 1 组:一个或多个单词字符\b
- 单词边界[^][]*
- 除 [
和 ]
字符]
- 一个 ]
字符[\w\W]*?
- 任何零个或多个尽可能少的字符\[/
- [/
文本\1
- 与第 1 组中捕获的文本相同\b
- 单词边界[^][]*]
- 除 [
和 ]
字符 + ]
字符之外的零个或多个字符。