ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

正規表現の“否定”について勘違いと、アンカー

昔、正規表現の基本を学んで、もう基礎的なことは大丈夫だろうと思っていたんですが、思いがけない重大な勘違いをしていました。

“ある文字列でない文字列”の表現の方法なんですが、正規表現ではこの表現が非常にやりづらいみたいで、私のように躓いている人もいると思うのでメモします。

どういうときにこういう正規表現を書くのかというと、私はHTMLのタグ認識をさせていました。

たとえば、以下はXMLですが、

<Root>
<Element>
なまむぎなまごめなまたまご
</Element>
</Root>


このXMLから、Elementの要素、なまむぎなまごめなまたまごを抜き出すための正規表現みたいなのを書こうとしたわけです。

まず、文字列"<Element>"の直後のアンカーを表す"(?<=<Element>)"を書きます。

アンカーも、実は今までよくわかっていなかったので、これも後でメモします。

そして、Elementの要素はなんでもいいので".*"とします。

そして、".*"だけだと"</Root>"までマッチしてしまうので、"</Element">の直前が最後なのだということを表すため、そのアンカーを表す"(?=</Element>"を書きます。

というわけでパターン文字列は"(?<=<Element>).*(?=</Element>)"となります。


ちなみに、".*"の解釈は行末で終わってしまうというのがデフォルトなので、解析対象に改行があった場合は行の概念を無視するように設定しておきます。
スポンサーサイト



続きを読む

tag: 正規表現 パターンマッチ 文字列処理 XML HTML アンカー

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。