2017-08-18 13 views
0

私はこの文字を交換しようとしていますhttp://www.fileformat.info/info/unicode/char/2014/index.htm 通常のダッシュで、これは私がまだできていないものです。PHP EMダッシュを置き換えるREGEX

$dataold = "9am – 5pm"; // from a ms word doc 

$data = mb_ereg_replace("[\xE2 \x80 \x94]", " - ", $dataold); 

print_r($data); 
+0

問題:あなたの例のコードは "N" ダッシュを持っています。あなたは "M"ダッシュを求めています。あなたが使用しているコードは、RegExの空白を削除する限り、「M」のダッシュでうまく動作します。 – JBH

+0

すべてのダッシュを 'space-space'に正規化したいだけですか?私は 'preg_replace( '〜\ p {Pd} ~u'、 ' - '、$ s)'を使うことができると思います。それ以外の場合は、EM-DASHでは 'str_replace( ' - '、 ' - '、$ s)'を、EN-DASHでは 'str_replace( ' - '、 ' - '、$ s)'を使用してください。 –

答えて

1

なぜ進Unicode形式でわざわざ?なぜ...

あなたの元のコードは、サンプルのテキスト文字列を持っている以外、正常に動作しますM-ダッシュ

$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace(" — ", " - ", $dataold); 
print_r($data); 

を交換してN-ダッシュに

$dataold = "9am – 5pm"; // from a ms word doc 
$data = mb_ereg_replace(" – ", " - ", $dataold); 
print_r($data); 

を交換していませんNダッシュとあなたはMダッシュをテストしている。 (RegExに余分なスペースがあります)。貼り付けた文字がページから直接コピー(あなたのコードからのコピーは動作しませんでした) - 私はそれが動作しますがしまっ

$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace("[\xE2\x80\x94]", " - ", $dataold); 
print_r($data); 
+0

文字列にUnicode文字が含まれていると、維持するのが難しいためです。正しいコードを使用することはより明確になります。 :) – yacc

0

これを試してみてください:

$dataold = "9am – 5pm"; // from a ms word doc 
$data = mb_ereg_replace("/ \\x{2014} /u", " - ", $dataold); 
print_r($data); 
+0

hmm no luck:/。 – NZSteve

+0

が更新されました。今はどうしますか? – yacc

+0

同じことがまだ起こっている:/ – NZSteve

0

...これを試してみてください。

<?php 
$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace("\x{2014}", "dash", $dataold); 
print_r($data); // output = 9am dash 5pm 

デモ:https://3v4l.org/9Lkpr

+0

これは動作しません。 – JBH

関連する問題