0

必须使用正则表达式检查此字符串...

<u>str<b>#u #bold<em>#u b #ital<strike>#u b em #ic stri</strike>ng</em>also(bold)</b></u><u>str<b>#u #boldalso(bold)</b></u>

这是正则表达式

[^.?]>#(.*?) #

匹配必须包含跟随值

<b>#u #
<em>#u b #
<strike>#u b em #
<b>#u #

但只有匹配

b>#u #
m>#u b #
e>#u b em #
b>#u #

怎么了?我认为这个表达式部分必须更新

[^.?]
4

2 回答 2

2

使用以下正则表达式:

<\w+>#[^#]*#


编辑: 表达式的解释:

  • <: 从 < 开始匹配
  • \w+: 后跟一个或多个字母
  • >: 然后关闭 >
  • #: 其次是 #
  • [^#]*: 这将在 # 之前匹配
  • #: 进而 #

所以

<\w+>#          [^#]*            #        Final Match
---------------------------------------------------------
'<b>#'          'u '            '#'     '<b>#u #'
'<em>#'         'u b '          '#'     '<em>#u b #'
'<strike>#'     'u b em '       '#'     '<strike>#u b em #'
'<b>#'          'u '            '#'     '<b>#u #'
于 2013-09-27T12:58:11.247 回答
1

谢谢你的重播,

我修改了表达式

(<(\w+)>#([^#]*)#)

对于这个(例如)字符串

   <strike> #u #String:Underline-Strike-1<b>#u strike #String:Underline-Strike-Bold </b></strike><strike>#u #String:Underline-Strike-2</strike>

一切都匹配,但不适合

 <strike> #u #String:Underline-Strike-1

">" 之后的 WHITESPACE 是问题所在...

如何修复正则表达式?

编辑

好的,我自己找到解决方案

\s*

最终的

(<(\w+)>\s*#([^#]*)#)
于 2013-09-27T19:48:17.183 回答