Closed7
複数のaタグの集まりから、リンク先に特定の文字が含まれるaタグだけ抽出する
ターゲットになるHTML。
この中から、リンク先にaccess
を含むaタグだけを抽出したい。
<nav>
<a href="/about">About</a> | <a href="/access">Access</a> | <a href="/contact">Contact</a>
</nav>
最短一致で、閉じタグを該当のaタグだけに絞ることはできた。
でも、これだと先頭のaタグを絞ることができない…
<a.*access.*?>.*?<\/a>
肯定先読みなるワードを知った
[正規表現] .*?は最短マッチではない
<a href="(?:(?!access).)*?<\/a>
<a href="(?:(?!<a href="|<\/a>).)*?<\/a>
aタグの抜き出し自体はできるようになった。
一歩前進した。
リンク先にaccessを含むaタグの抽出ができるようになった。
accessはdocumentsフォルダの中にいるので、パスのパターンとして想定されるのを拾えるようにした
"access", "documents/access", "../documents/access", "documentRoot/documents/access"
肯定先読みの部分は要らないっぽいけど、ひとまずこれで期待する値が取れるようになった。
(?:)
これを使うと、キャプチャしないグルーピングができる。正規表現で抽出した値の一部を使用した置換を実行するときに便利かも。
.*?
のっけから、この表現を使う前提で考えていたのが良くなかった。正規表現を使うときには、抽出したい文字列がどういう文字の組み合わせでできているのか、をまず把握することが大事。
このスクラップは2022/06/08にクローズされました