0

私はクライアント用のhtmlパーサーに取り組んでおり、RegExをいじり始めたところです。私はそれはまったく新しいですが、すぐに学んでいます!この部分では、ドキュメント内の18.0ptサイズのすべてのテキストを取得する必要があります。これが私が試した最初の正規表現です(リアルタイムの正規表現テスターを使用):

<p.*?><span.*?style='.*?font-size:1

これが私のテストテキストです:

<p class=MsoNormal><span style='font-size:14.0pt;font-family:"Comic Sans MS"'>3<sup>rd</sup>
Sunday in Lent - 2013c<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:14.0pt;font-family:"Comic Sans MS"'>Old
Testament – Isaiah 55:1-9<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:14.0pt;font-family:"Comic Sans MS"'>New
Testament – Luke 13:1-9<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:18.0pt;font-family:"Comic Sans MS"'><o:p>&nbsp;</o:p>
</span></p>

これは正しく機能し、1まで各行を個別に強調表示します。問題は、1を18に変更すると、font-size:18の行だけを強調表示するのではなく、最初の行から18までのすべての行を強調表示することです。 18ptフォントで線をつかみたいです。ありがとう、そしてどんな助けも大歓迎です!:)

4

2 に答える 2

2

これがより良い正規表現です:

<p[^>]*>[ \t\r\n]*<span[^>]* style='[^']*font-size:18

あなたの人はあなたが言った通りにやっています。を検索<pし、次に任意の数の任意の文字を検索し、次に><span、さらに任意の文字を検索し、次にfont-size:18。したがって、 。までの最初の任意の文字を検索し、<p次にすべての任意font-size:18の文字を検索します。最初の例では、すべてのスパンにフォントサイズが指定されていたのは幸運でした。

このバージョンではそれほど多くは許可されていません。任意で停止します>。また、より堅牢にするために、<p>との間の空白を許可しました<span>

于 2013-03-09T00:35:46.500 に答える
0

「任意の文字」(ドット)と一致する代わりに、「改行以外の任意の文字」と一致する場合は、行の終わりを超えないようにしてください。

<p.*?><span[^\n]*?style='[^\n]*?font-size:18

現在、通常、.特定のフラグ(環境によって異なります)が設定されていない限り、改行と一致しません。特に、sフラグです。それが正規表現テスターのデフォルトでしょうか?

もう1つの考えは、{}と一致すると予想される文字数を制限することです。たとえば、

<p.{,20}>

<p>これは、開始タグに20文字以下である限り機能します。

于 2013-03-09T00:27:24.713 に答える