2015-04-17 306 views
2

我想获取特殊字符之间的最后一个字符串。我已经做了方括号作为\[(.*)\]$匹配特殊字符之间的最后一个字符串

但是,当我在Blah [Hi]How is this[KoTuWa]之类的东西上使用它。我得到的结果为[Hi]How is this[KoTuWa]

如何修改它以得到最后一个字符串KotuWa

此外,我想推广到一般特殊字符,而不是像上面那样匹配方括号之间的字符串。

感谢, 西

回答

5

我会这样做:

[^[\]]+(?=][^[\]]*$) 

Regular expression visualization

Debuggex Demo

将其扩展到其他类型的支架/特殊字符,再说我也想匹配的大括号{和双引号"

[^{}"[\]]+(?=["\]}][^{}"[\]]*$) 

Regular expression visualization

Debuggex Demo(我加了多行/m只显示多个例子)

+0

谢谢,这似乎罚款到目前为止。但是,我如何轻松地将它扩展到一组特殊字符之间的最后一个字符串? –

+0

取决于什么“特殊字符”对你。基本上你把这些都放在负面的字符类(你看到的'[^ ...]'部分)。并且他们用一个可接受的结束分隔符的字符类来替换查找头中的第一个'](这是'(?= ...)'部分)。 – funkwurm

+0

这似乎更容易就像'\ W +([\ w \ s] +)\ W * $' – hwnd

1

可以要求括号中的字符串不包含括号:

编辑:感谢funkwurm和jcubic对指出错误。这里的fixed expression

\[([^[]+)\][^\[]*$ 

如果您需要使用其他的分隔比括号,你应该:

  • 更换\[\]与新分离
  • 更换负字符类与你的开始分隔符。

例如,假设您需要使用分隔<>而不是[],你会怎么做this

<([^<]+)>[^\>]*$ 
+1

如果在[[KoTuWa]'之后有任何字符就会中断,如[here](https://regex101.com/r/aX8yH9/1) – funkwurm

+1

括号内的单词之后可能会有更多字符,如“[foo] bar [baz] quux“ – jcubic

+0

以前的表达有什么好处呢,我可以定制特殊字符。我如何在这种情况下这样做? –

0

下面是做到这一点的一种方法:

\[([^\[]*)\]$ 
相关问题