2017-03-22 16 views
-1

を実行するのに長いミリ秒以上かかったので、これはC#を使用して、特定の文字列からCSSを抽出するための私の正規表現パターンです:正規表現のエラー:式が

(([\s]*\/\*[^\*]+\*\/)?((@media|@keyframes)[^{]+\{[\s]*)?(((\b(html|head|body|a|abbr|area|audio|b|base|blockquote|button|canvas|code|datalist|dialog|div)|em|embed|font|footer|form|h1|h2|h3|h4|h5|h6|header|hr|i|iframe|img|input|label|li|link|main|map|menu|meta|object|ol|optgroup|option|output|p|param|pre|section|select|span|strong|sup|table|textarea|tfoot|th|head|td|title|tr|u|ul|video|\*))\b)?((\.|\#|\[)[^\s,\.\#\|]+)*([:]{1,2}[^\s,]+)*((\s)|(\,)|(\+)|(\~)|(>)|(&telde;))*)+[\s]*\{[^}]+\}([\s]*\})? 

私のサンプルテキストは、次のとおりです。チェックの際

View hashtags #BrandPositioning#DesignThinking#DesignandInnovation #DigitalCustomerDesign#DigitalCustomerExperience#DigitalCustomerInnovation#DigitalDesign #DigitalDesignandInnovation #DigitalDesignDelivery #DigitalDesignRealization #DigitalEnterpriseExperience#DigitalServiceDesign#ExperienceDesign #Fjord #GraphicDesign #LivingServices#ServiceandExperienceDesign#ServiceDesign#UserCenteredThinking

エラーは

expression took longer than 250ms to execute

なぜですか?そしてどのように治療する?

+0

これは、プログラミング言語などの追加の詳細の恩恵を受けるでしょう。正確にあなたが挑戦しようとしているものieve。一見、それはいくつかのHTMLからいくつかのハッシュタグを抽出しようとしているようですか?正規表現は最良の解決策ではないかもしれません。 – Chris

+1

@Chris私は質問を編集しました。私はC#を使用しています、正規表現はCSSから文字列を抽出することです – tjvg1991

+0

あなたのサンプルテキストにもCSSのプロパティが1つもないことに気付いていますか? –

答えて

1

壊滅的なバックトラッキングと呼ばれることは、パターンに冗長な部分があるために発生します。

は、次の2つのオプションがあります:あなたの正規表現簡素化し、無駄な入力

  • に対して実行正規表現を避けるために

    • メイク有数のテストをバックトラッキングはあなたに変換することができ((\.|\#|\[)[^\s,\.\#\|]+)*ある原因のようです何

    ((\.|\#|\[)[^\s,\.\#\|]*)

  • +0

    CSSセレクタとプロパティをキャッチするための代替の正規表現パターンがありますか? – tjvg1991

    +0

    @ tjvg1991編集 –

    +0

    参照これは、次の#idと.classに続く#idと.classの最初のインスタンスにのみ一致します – tjvg1991