RegEx匹配 - 停止第一次匹配

时间:2013-09-27 12:52:11

标签: php regex

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

<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 #

有什么不对?我认为这个表达式部分必须更新

[^.?]

2 个答案:

答案 0 :(得分:2)

使用以下正则表达式:

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


修改: 表达式的解释:

  • <:它从&lt;
  • 开始匹配
  • \w+:后跟一个或多个字母
  • >:然后关闭&gt;
  • #:后跟#
  • [^#]*:这将在#
  • 之前匹配
  • #:然后#

所以

<\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 #'

答案 1 :(得分: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

“&gt;”之后的WHITESPACE是问题...

如何修复正则表达式?

修改

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

\s*

最终

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