9

C プログラム コードで使用できる POSIX (拡張) 正規表現を使用して正規表現を作成しようとしています。

具体的には、次のように考えましたが、一致する式から「http」という単語を除外したいと考えています。いくつかの検索では、POSIX が特定の文字列をキャッチすることを明らかにしているようには見えません。以下の例では、「ネガティブルックアヘッド」と呼ばれるものを使用しています (つまり、(?!http:) )。ただし、これは POSIX 以外の方言で定義された正規表現でのみ使用できるものである可能性があります。否定先読みは許可されていますか? 論理 NOT 演算子は POSIX で許可されていますか (つまり! )?

動作する正規表現の例:

href|HREF|src[[:space:]]=[[:space:]]\"(?!http:)[^\"]+\"[/]

他の方言のように否定先読みを使用できない場合、特定の単語「http:」を除外するために上記の正規表現に何ができるでしょうか? 理想的には、逆ロジックがなく、最終的にその過程でとてつもなく長い正規表現を作成する方法はありますか? (私が上に持っているものはすでにかなり長いです, できればもっと混乱しないようにしたいです)

[注: スタック オーバーフローの他の関連するスレッドを調べましたが、最も関連性の高いスレッドは、この質問を「一般的に」しかしていないようです。 、私は上記の (?!insertWordToExcludeHere) 否定的な先読みを見てきましたが、それは PHP だけのものなのではないかと心配しています。)

[注 2: POSIX の正規表現の言い回しも使用します。助けていただければ幸いです。「http:」を除外する正規表現がどのように見えるか、および(?!http:)を置き換えて現在の正規表現にどのように適合するかについて、誰か提案がありますか?]

4

1 に答える 1

10

http://www.regular-expressions.info/refflavors.htmlによると、先読みと後読みはPOSIXフレーバーには含まれていません。

問題が複雑すぎて正規表現としてきれいに表現できない場合は、字句解析(トークン化)と構文解析の観点から考えることを検討してください。

于 2013-03-13T05:11:35.907 に答える