Perlコマンドライン正規表現の不一致

Perlコマンドライン正規表現の不一致

したがって、次の形式のコンテンツを含むファイルがあります。

randomString abc\/def/ghi/mno\/pq/r   abc\/def\/ghi/mno\/pq/r

私の意図は、2つの英数字文字列の間のすべての項目を終わる単語にorがない場合に置き換えることです。/したがって、理想的には次のようになります。\/\/

randomString abc\/def\/ghi\/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

これでほぼ結果が得られるregEx

perl -pe 's/(\/\w+)\/(\w+\/|\w+\\)/$1\\\/$2/g' file

これは私に戻ります。

randomString abc\/def\/ghi/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

ghi/mno何らかの理由で文字列の一部が変更されていない理由はわかりません。

perlコマンドラインでこれを行う方法を探しています。

ベストアンサー1

プレビューを使用して、次のスラッシュのみを置き換えることができます。

  • (?<!\\)前にバックスラッシュはありません。
  • (?!\w+\s)スペースで終わる後続の単語文字はありません。

例えば

echo 'randomString abc\/def/ghi/mno\/pq/r   abc\/def\/ghi/mno\/pq/r' |
  perl -pe 's;(?<!\\)/(?!\w+\s);\\/;g'
randomString abc\/def\/ghi\/mno\/pq/r   abc\/def\/ghi\/mno\/pq/r

おすすめ記事