リンク先を捕まえたい

先程から正規表現でaタグのhref内を置き替える方法を模索しているのだが、hrefより前に他の属性がある状況を処理できない。

<a ([^(href=)]*)

ではa href=でもa name=でも検索対象になっているようなのに、

<a ([^(href=)]*)href=\"([^(http:\/\/)]|[^\"]*)\"

になるとa href=以外無視されてしまうのでa name="foo" href="baa"の場合が捕捉できない。
なんで「1.html」や「a.html]は置換できて「test.html」は不可なのか疑問だったのだけれど、ひょっとして(http://)のせいですか。括弧内は一連の文字列を1オブジェクトとして処理するのだと思っていたけれど、含まれる文字を個別に処理してる?どうもh,t,pで始まるファイル名の場合のみ除外されているっぽいのだが。
id;crowdeer氏のブクマコメントの御陰でhref以前に属性がある場合の処理は巧く行った。有り難うございます。残る問題はhttp://で始まるものの除外のみ。


あと未だに多重括弧状態での後方参照の順番が判らない。(A(B))(C(D))の場合$1:A,$2:B,$3:C,$4:D?それとも$1:B,$2:A,$3:D,$4:C?
実験結果はどちらとも異なるような……
説明を読むと、括弧開始位置最左で順序が決定されるらしい。上の例ならABCDの順。