質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

2588閲覧

html内指定部分の正規表現を教えてください。

seel

総合スコア25

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/09/28 13:23

編集2016/09/28 13:26

正規表現を教えてください。

html

1sample.html 2 3<h1><a href="http://www.exmple.com">text</a></h1> 4

URL部分はかなりバリエーションがありますがすべてこの形式となっており

html

1<h1><a href="様々なURL">text</a></h1>

<h1><a href="様々なURL">text</a></h1>

text部分は大文字小文字半角全角英数字を指定したいです。

Html

1 2大文字小文字全角半角英数字を示す正規表現 3 4[a-zA-Za-zA-Z0-90-9]

イメージ1

html

1sample.html 2 3<h1><a href="様々なURL">大文字小文字全角半角英数字</a></h1>

イメージ2

html

1sample.html 2 3<h1><a href="様々なURL">[a-zA-Za-zA-Z0-90-9]</a></h1>

この範囲と指定文字の組み合わせを考えたらパニックになってしまいました。
どなたかわかる方、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

bash

1$ sed -e 's/.*>\([^<]\+\)<.*/\1/'

ではダメでしょうか?

bash

1$ echo '<h1><a href="様々なURL">text</a></h1>' | sed -e 's/.*>\([^<]\+\)<.*/\1/' 2text 3$ echo '<h1><a href="様々なURL">大文字小文字全角半角英数字</a></h1>' | sed -e 's/.*>\([^<]\+\)<.*/\1/' 4大文字小文字全角半角英数字 5$ echo '<h1><a href="様々なURL">[a-zA-Za-zA-Z0-90-9]</a></h1>' | sed -e 's/.*>\([^<]\+\)<.*/\1/' 6[a-zA-Za-zA-Z0-90-9]

外してたらごめんなさい。

投稿2016/10/25 08:50

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

昨日のご質問の関連質問かと思います。わざわざ質問を分けなくてもよかったと思います。というか、こまぎれ質問をなさると質問の背景が伝わりにくくなり、いい回答をもらえませんよ。

で、これまでのご質問からすると、タグの部分は変更せず、タグ以外の部分を置換・削除などしたいのですよね。
すると、タグの部分は、中身がどうなっているかは気にしなくていいですね。「『<』ではじまり、『>』でないものが続き、『>』でおわる」だけでいいはずです。

<[^>][^>]*>

タグ以外の部分は、「『<』や『>』でないもの」ですね。

[^<>]* または [^<>][^<>]*

さて、タグが入れ子になったりしているケースまで考えだすと複雑ですが、発想を変えて、HTMLは次のようになっていると考えられませんか。

HTML

1タグでない部分<タグの部分>タグでない部分 ... <タグの部分>タグでない部分

「タグでない部分」になにもない場合もあります。その場合はタグが隣接しているということですね。

ですから、処理としては、次の2種類に集約されます。

(1) 「タグでない部分<タグの部分>」の正規表現にマッチさせ、マッチしたすべての個所の「タグでない部分」の処理をする。

:loop s/[0-9a-zA-Z0-9a-zA-Z]\([^<>]*\)\(<[^>][^>]*>\)/\1\2/g tloop

(2) 最後の「タグでない部分」の処理をする。

:loop2 s/[0-9a-zA-Z0-9a-zA-Z]\([^<>]*\)$/\1/ t loop2
  • どちらも、タグの部分とタグでない部分をグループ化して、置換結果に使っているのがおわかりでしょうか。

  • なお、「$」は「改行の直前」、つまり行末を意味します。厳密にするならGNU拡張仕様の「'」(文字列の末尾) を使ったほうがいいかもしれません。

投稿2016/09/28 23:57

編集2016/09/29 00:20
ikedas

総合スコア4333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

[a-zA-Za-zA-Z0-90-9]の部分は1文字にしかマッチしませんので量指定子(1文字以上であれば+、0文字以上であれば*等)と組み合わせると良いでしょう。

「様々なURL」の箇所については、自分なら「ダブルクォーテーションでは無い文字の1文字以上の繰り返し」などのパターンにするかも知れません。

投稿2016/09/28 13:59

nakit

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問