2017-03-25 1 views

答えて

3

ストレートフォワード\Q...\Eシーケンスを使用して:

\Q.eot?\E[^'")]+ 

これを.eotに置き換え、a demo on regex101.comを参照してください。 \Q...\Eシーケンスでは、すべての文字がプレーンリテラルとして扱われるため、エスケープは必要ありません。

+0

ありがとうJanさん、あなたのソリューションは意図したとおりに動作します。一重引用符や二重引用符がない場合でも置き換える方法はありますか?サンプル:url(../ some-font.eot?v = 4.6.3); –

+1

@EduardoSR:もちろん、デモを更新しました。文字クラスに別の ')'を追加するだけです。 – Jan

+1

はい、それは働いています、ありがとうJan! –

0

ここ幅広い正規表現のビット(それは最初?にほとんど何でも一致します)が、これはあなたのパスの出発点を与える必要があります:

echo preg_replace("/^([^?]+).*/", "$1", "../some-font.eot?v=4.6.3"); 

プリント:

../some-font.eot

アンカーを削除し、ファイル全体を検索するコンテキストを追加したいと思うでしょう。たとえば、posi息を呑むように見える。

echo preg_replace("/(?<=src: url\(')([^?]+)[^']*?/", "$1", "src: url('../some-font.eot?v=4.6.3');"); 

プリント:

SRC:URL( '../一部-font.eot');

あなたの気に入っているURL(たとえば、コメント、contentのプロパティなどには触れないなど)を置き換えることができます。

+0

ありがとうございましたAdam、Janのソリューションが解決しました。 –

2

文字列を検索し、次に閉じたカプセル化文字でないものをすべて検索します。

eot\?[^'"]+ 

正規表現デモ:https://regex101.com/r/SEPPHc/1/

PHPデモ:https://eval.in/761197

PHP:

$string = "@font-face { 
    src: url('../some-font.eot?v=4.6.3'); 
}"; 
echo preg_replace('/eot\?[^\'"]+/', 'eot', $string); 
+0

クリスおかげで、それは正常に動作します。一重引用符や二重引用符がない場合でも置き換える方法はありますか?サンプル:url(../ some-font.eot?v = 4.6.3); –

+0

@EduardoSR何が一貫していて、いつも ')'で終わりますか?たぶんhttps://regex101.com/r/SEPPHc/2/ – chris85

+0

はい、いつも。 'url( '../ some-font.eot?v = 4.6.3');'または 'url(" ../ some-font.eot?v = 4.6.3 ")'または'url(../ some-font.eot?v = 4.6.3)' –

関連する問題