正则表达式:懒惰的比赛离开

时间:2018-02-01 13:08:40

标签: c# regex

我有以下示例:

FirebaseMessageService

我需要找到并替换一个代码段:

public override void HandleIntent(Intent intent)
{
    try
    {
        if (intent.Extras != null)
        {
            var builder = new RemoteMessage.Builder("MyFirebaseMessagingService");

            foreach (string key in intent.Extras.KeySet())
            {
                builder.AddData(key, intent.Extras.Get(key).ToString());
            }

            this.OnMessageReceived(builder.Build());
        }
        else
        {
            base.HandleIntent(intent);
        }
    }
    catch (Exception)
    {
        base.HandleIntent(intent);
    }
}

在我的例子中,我想找到并替换它:

        <strong><span style="text-decoration: underline;">LAbel<br>
    </span></strong>
<span style="color: #1f497d;">Label:</span>&nbsp;
[[<span href="#" style="background: red; color: white;" field-id="97c97578-ac1b-4495-a3a7-85e75d0acf40"> some text ... </span>]]&nbsp;
[[<span href="#" style="background: red; color: white;" field-id="db983948-6458-4be8-9044-174093d39976"> some other text ... </span>]]<br>

我的模式是:

[[<span somestyle_and_attributes field-id="some GUID"> some random text </span>]]

但是因为我希望正则表达式从GUID和field-id开始找到一个匹配并稍稍向后移动(直到最近的 [[span )它还包括前面的span标记。

我可以在打开的span标签与模式(样式,属性等)之间包含所有内容,但我觉得有更简单的方法可以找到最接近的匹配。

1 个答案:

答案 0 :(得分:-1)

您可以尝试以下方式:

\[\[<span [^>]* field-id="db983948-6458-4be8-9044-174093d39976">.*</span>\]\]

<小时/> 更新: 感谢@Juharr和@Mong朱,他们指出不应该使用Regex解析HTML dom树 https://www.johndcook.com/blog/2013/02/21/can-regular-expressions-parse-html-or-not/