ホームページ > バックエンド開発 > PHPチュートリアル > javascript - 正規表現についての質問

javascript - 正規表現についての質問

WBOY
リリース: 2016-08-04 09:18:59
オリジナル
1089 人が閲覧しました

質問: 「python php Ruby javascript jsonp possiblephpisoutdated」という文字列があります。この文字列については、純粋な正規表現を使用して、p を含むすべての単語を取得しますが、ph は取得しません

出力配列 [ 'python', 'javascript', 'jsonp' ]

この問題について長い間考えてきましたが、わかりません

私の解決策は次のとおりです
リーリー

しかし、それは純粋な規則性の要件を満たしていません

グループの偉い人がこんな答えをしてくれました

リーリー

完璧に動作します

でも私には理解できないので、誰かが理解するのを手伝ってくれることを願っています

返信内容:

質問: 「python php Ruby javascript jsonp possiblephpisoutdated」という文字列があります。この文字列については、純粋な正規表現を使用して、p を含むすべての単語を取得しますが、ph は取得しません


出力配列 [ 'python', 'javascript', 'jsonp' ]

この問題について長い間考えてきましたが、わかりません

私の解決策は次のとおりです

リーリー
しかし、それは純粋な規則性の要件を満たしていません

グループの偉い人がこんな答えをしてくれました

リーリー

完璧に動作します

でも私には理解できないので、誰かが理解するのを手伝ってくれることを願っています

リーリー

  • の間の文字。

    b为边界字符,范围为wW

  • は部分式を識別します。

    ()

  • は、逆先読みアサーションを識別します。部分式とは異なり、先読みアサーションは記録されません。

    (?!)

  • 条件を満たさないセットを特定します

    [^]

したがって、上記の通常の意味は、
「p」を含むが、その直後の文字列が「h」または「space」ではなく、「ph」も含まない境界間の文字列を取得します

b((?!ph|s).)*((p[^hs]((?!ph|s).)*)|p)b/g

b は境界文字です

b((?!ph|s).)*((p[^hs]((?!ph|s).)*)|p)b/g
b各単語に対応する一致は次のとおりです:


((?!ph|s).)*((p[^hs]((?!ph|s).)*)|p)この式を 3 つの部分に分割します:

  1. ((?!ph|s).)*

  2. (p[^hs]((?!ph|s).)*)

  3. p

  4. 最も一般的な表現は
分析しましょう

((?!ph|s).)*

「JavaScript の決定版ガイド」には次のように書かれています: (?!p)
幅ゼロの否定先読みアサーション

であり、次の文字が一致しないことを意味します (?!p)零宽度负向先行断言,表示接下来的字符不与 p

ここでの 幅ゼロ は、 マッチングを占有しない ことを意味します。
これは、理解するのが難しいかもしれません。例:

"1234".match(/((?!34).)*/)

の値を計算する
  1. 初めて(?!34)之前没有东西、忽略,只对.进行匹配,匹配到"1",字符串剩余"234"

  2. はい"234"进行匹配,测试"23"是否匹配?!里的"34",结果不匹配,继续进行,"23"没有被消耗,接下来的.匹配到"2"

  3. はい"34"进行匹配,由于"34"匹配?!里的"34"、マッチングは終了しました

式全体の一致結果は "12"

結論: /((?!p).)*/ の形式で式に一致する文字列は /((?!p).)*/形式的表达式匹配到的字符串是p

より前の部分です

ここで前の 3 つの式を見てみましょう:

  1. ((?!ph|s).)*

  2. (p[^hs]((?!ph|s).)*)

  3. p

  • 最初の式は、単語内の "ph" またはスペースの前にある可能な限り長い文字と一致することを意味します

  • 2 番目の式は、単語 "p" 以降の文字と一致します。"p" の後の最初の文字を "h" にすることはできません。 、同じ要件は一致しません "p" 及之后的字符,要求 "p" 之后的第一个字符不能为 "h",并且同样要求不匹配到 "ph"

  • 3 番目の式は、少なくとも 2 文字である単一の "p" 字符,因为之前的匹配中最短能匹配到的形式是 p[^hs] に一致しますが、単一の「p」文字は要求されていますが含まれていないため、単独で一致します

それを並べ替えると、上記の 3 つの一致する式のどれも "ph", 但其中一定会有 "p" に一致しないことがわかりますが、その中には "p" が含まれている必要があり、これは質問の要件を完全に満たしています

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート