2

重複の可能性:
正規表現は、XHTML の自己完結型タグを除く開始タグに一致します

次のような約2000行を含むファイルがあります。

<nobr>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../Carbon_Monoxide_Poisoning_Prevention.htm"><b>poisoning - prevention</b></a></nobr><br>
<nobr>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../Carbon_Monoxide_Symptoms.htm"><b>symptoms</b></a></nobr><br>

1.) URL は常に次の形式です。../foo.html

<b> ... </b>2.) 表示名がタグで囲まれている場合とそうでない場合があります。

3.) ファイルの各行には最大 4 つ含まれており&nbsp;、スペースとして数えてフラグを立てる必要があります。これらは最終的にインデントをフォーマットするために使用されるため、何らかの方法で情報を取得する必要があります。

次のように、区切られたフラット ファイルにハイパーリンク、表示名、およびスペース名の数が必要です (上記のデータに基づく)。

../Carbon_Monoxide_Poisoning_Prevention.htm,poisoning - prevention,4
../Carbon_Monoxide_Symptoms.htm,symptoms,4

. これは、文字列、部分文字列、および if ステートメントの混乱全体を通して解析できますが、必要以上に面倒なようです。私は正規表現を調査していましたが(初めて調査しました)、構文の一部が少し不明です。自分のアプリケーションに似たコード サンプルを見るのが最もよくわかりますが、完全に適合する例を見つけることができませんでした。

どんな助けでも大歓迎です!

4

5 に答える 5

0

Regular expression parsing HTML is not appropriate because it isn't a regular language. How many times does this have to be asked? besides regular expressions aren't a programming language, you can't do the counting and book keeping you want to do, they are for matching patterns in a regular language.

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. -- Jamie Zawinski

Regular expressions are specialized tools, they aren't hammers to beat in every nail that looks like a String that needs to be pattern matched or searched or otherwise manipulated.

Jeff Atwood has a good discussion of the cons and pros of regular expressions, if you don't know a lot about them, read what he has to say before you try and wield them.

于 2012-06-14T15:37:10.193 に答える
0

一度に取得できるのは、すべての URL、表示名、またはスペースの 1 つだけです。これを行うために正規表現を使用することはありませんが、絶対に正規表現を使用する必要がある場合は、次のようにします。

URL を 1 行で取得するには:\.\./.*\.html?

表示名を取得するには:(?<=("|b)>)[a-ZA-Z].+?(?=(</(a|b)))

スペースを取得するには (単純に):&nbsp;


<br>最初にファイルをタグで分割して、個々の行を取得します。上記の正規表現を実行して、URL、表示名、およびスペースを取り出し、それらを区切りの出力に結合します。preg_match_allJavaには、見つかったすべてのパターンに一致する同等のものがあると確信しています(スペースとそれらのカウントに役立ちます)

これらのパターンは Sublime Text でテストされており、おそらく Java では少し調整しないと機能しないことに注意してください。必要に応じて後で回答を変更して Java を含めることができますが、このような 1 回限りのことについては、Python やその他のスクリプト言語を使用する方がよい場合があります。

頑張ってください!

于 2012-06-14T16:02:34.200 に答える
0

正規表現とは言えませんが、スクリプト言語を使用してプログラム全体を作成することを回避できる場合があります。Bash/Perl/Powershell/etc にはいくつかのツールがあります。それらはあなたの目的によりよく機能するようです。その後も、grep などのツールを使用して、他のツール、データ構造、条件などを組み合わせた正規表現の力を活用できます。さらに、重い HTML を処理する場合は、パイプできるツールがいくつかあります。あなたの人生を楽にするために、または電話してください。

于 2012-06-14T15:12:48.127 に答える
0

出力としてカウントが必要な場合は、正規表現を使用しないでください (おそらく使用できません)。一般に、実行しようとしていることがアルゴリズムによって記述されている場合は、それをプログラムする必要があります。あなたがやろうとしていることが「次のような文字列/部分文字列を探しています...」と説明されている場合は、正規表現を使用することをお勧めします。

于 2012-06-14T15:09:10.250 に答える
-1

正規表現は、これにアプローチする正しい方法です。文字列トークナイザー(スペースを数えるため)と同様に。ただし、元の文字列を移動する方法として、サブ文字列を使用する必要があります。

パターントークナイザーに関するいくつかのリンク(例を含む)は次のとおりです。

于 2012-06-14T15:19:13.723 に答える