В общем, регулярное выражение не очень хорошая идея для разбора HTML (если это один раз, вы можете быть в порядке).
Я думаю, это может быть причиной того, что ваше регулярное выражение не работает.
Можете ли вы привести пример случая, когда ваше регулярное выражение терпит неудачу?
Один случай, о котором я могу подумать, если нет совпадения ([a-z][A-Z]
) в соответствующей паре <font color=#0B610B></font>
, но равно в соседней <font></font>
. Например:
<font color=#0B610B>word word</font><font color=#000000>word wordWord</font>
В этом случае допустимое совпадение only равно <font color=#0B610B>word word</font><font color=#000000>word word
, а остальная часть строки Word</font>
, и поэтому это то, чему соответствует регулярное выражение (поскольку, если оно может соответствовать, оно будет!)
Я могу придумать грубый обходной путь, но я не рекомендовал бы его, если только эта задача не является единовременной, поскольку использование регулярных выражений для HTML всегда склонно к таким ошибкам !. Это регулярное выражение также довольно неэффективно. Попробуйте (не проверено):
(<font color =#0B610B\b[^>]*>)(([^<]|<(?!/font))*?[a-z])([A-Z].*?</font>)
Там написано: «ищите тег <font colour=xxxx>
, за которым следует либо угловая скобка <
, а не , затем /font
, ИЛИ что-нибудь еще и снова, затем следует [a-z][A-Z]
» ,
Таким образом, он пытается убедиться, что матч не выходит за границы </font>
.