次のような行を含むhtmlがたくさんあります。
<a href="#" rel="this is a test">
rel-attribute のスペースをアンダースコアに置き換える必要がありますが、私は一種の正規表現初心者です!
テキストメイトを使用しています。
誰でも私を助けることができますか?
/ヤコブ
私はあなたがこれを適切に行うことができないと思います。なぜ一度にやる必要があるのかしら?
私はそれを行うための本当に悪い方法を考えることができます、しかし私がそれを推薦しなくても、ここに行きます:
以下の正規表現でそれを行うことができます。ただし、キャプチャと出力の数を増やして、末尾に_を付けて、rel内の潜在的なスペースの数を増やす必要があります。私はそれがこの解決策を許可しない要件であるに違いない。
探す:
{\<a *href\=\"[^\"]*" *rel\=\"}{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*{([^ ]*|[^\"]*)}( |\")*
交換:
\1\2_\3_\4_\5_\6_\7_\8_
この方法には2つの欠点があります。1つはTextmateで取得できるキャプチャの数に制限がある可能性があること、2つは各行の終わりに多数の_が含まれることです。
上記の正規表現を使用した現在のテストでは、次のようになります。
<a href="#" rel="this_is_a_test">____
PS:この正規表現は、VisualStudioの検索/置換ボックスの形式です。おそらく、テキストパッドに合うようにいくつかの文字を変更する必要があります。
{} => capturing group
() => grouping
[^A] => anything but A
( |\")* => space or "
\1 => is the first capture
正規表現は、HTMLの解析が根本的に苦手です (その理由については、正規表現を使用して XML と HTML を解析するのが難しい理由の例をいくつか提供できますか? を参照してください)。必要なのは HTML パーサーです。お気に入りのパーサーで HTML を解析する例を教えてください。たとえば、さまざまなパーサーを使用しています。
ここで「あなたは間違ったツールを使っています」という列車に乗らなければなりません。あなたは Textmate を持っているので、つまり OSX を意味します。つまり、sed、awk、ruby、perl を持っていることを意味します。
これらのツールの 1 つを使用してテキストを操作する方法を学ぶと、将来、数え切れないほどのメリットが得られます。sed を簡単に使用できる URL は次のとおりです: http://www.grymoire.com/Unix/Sed.html
rel の値をすでに受け取っているとします。
var value = document.getElementById(id).getAttribute( "rel");
var rel = (new String( value)).replace( /\s/g,"_");
document.getElementById(id).setAttribute( "rel", rel);
TextMateを使用している場合は、Macを使用しているため、Pythonを使用しています。
これを試して:
#!/usr/bin/env python
import re
input = open('test.html', 'r')
p_spaces = re.compile(r'^.*rel="[^"]+".*$')
for line in input:
matches = p_spaces.findall(line)
for match in matches:
new_rel = match.replace(' ', '_')
line = line.replace(match, new_rel)
print line,
サンプル出力:
$ cat test.html
testing, testing, 1, 2, 3
<a href="#" rel="this is a test">
<unrelated line>
Stuff
<a href="#" rel="this is not a test">
<a href="#" rel="this is not a test" rel="this is invalid syntax (two rels)">
aoseuaoeua
$ ./test.py
testing, testing, 1, 2, 3
<a_href="#"_rel="this_is_a_test">
<unrelated line>
Stuff
<a_href="#"_rel="this_is_not_a_test">
<a_href="#"_rel="this_is_not_a_test"_rel="this_is_invalid_syntax_(two_rels)">
aoseuaoeua