2016-03-21 13 views
1

タイムコード付きのテキストブロックがあり、タイムコードを削除したいと考えています。preg_replaceが一致しません#210

$pattern = "~(\d+\s\d+:\d+:\d+,\d+\s-->\s\d+:\d+:\d+,\d+)~"; 
$replace = ""; 
$subject = "1 00:00:30,304 --> 00:00:34,165 Our focus today is to share with you 2 00:00:34,165 --> 00:00:36,715 key components of preparing and submitting 3 00:00:36,715 --> 00:00:40,715 a warranty transaction..."; 
echo preg_replace($pattern, $replace, $subject); 

私がオンライン試してみたの正規表現テスターのすべては、それが有効な正規表現だと言うが、私は私が間違ってやっているかわからないんだと正規表現の質問の他の何百ものどれも私の問題に合うように思いません。

+1

分裂と征服:最初のテストより簡単なエクスペリエンス –

+0

Regexの質問にもっと良い場所がある場合は、そこに行くことで大丈夫です。私はここに多くの正規表現の質問があることを知っている、私はちょうどそれが動作していない理由で困っている。 – AndyD273

+1

あなたは何を期待していますか? http://sandbox.onlinephpfunctions.com/code/aecdf337a3aa10dcd3616e3ab4e06f841f902f71 – AbraCadaver

答えて

2

あなたにもアプローチ(短い)を読み取るために、より良いを使用することができます。

$regex = "~([\d:\h,]+ --> [\d:,]+)~"; 
$replace = ""; 
$subject = "1 00:00:30,304 --> 00:00:34,165 Our focus today is to share with you 2 00:00:34,165 --> 00:00:36,715 key components of preparing and submitting 3 00:00:36,715 --> 00:00:40,715 a warranty transaction..."; 
echo preg_replace($regex, $replace, $subject); 

は、単に文字クラスにあなたのパターンを組み合わせて、代わりに水平方向のスペース(\h)を使用。
a demo on regex101.comを参照してください。

+1

ニース!私は最初に欠けていた余分な改行をキャッチするために '〜([\ d:\ h \ s +、] + - [\ d:、] +)〜'に少し変更しました。より良い。ありがとう! – AndyD273

+0

@ AndyD273: '\ s'には' \ h'が含まれているので、最初のかっこを '[\ d:\ s、]'に変更することができます。 – Jan

0

最初の数字の後には複数の空白があり、私は\ sを探していたので、一致しませんでした。
私はそれを\ s +に変更しました。

最終正規表現の文字列は、この

〜( - :\ D +:\ D +、\ D +:\ D +> \ S \ dは+ \ D +、\ dは+ \ S \ D + \ + \ D + S)でした〜 問題は、データベースの文字列の最初の桁の後に、Windows形式(crlf)の新しい行があることでした。 コピーして貼り付けたときに、テストページが1つの改行であったために動作しましたが、実際のデータに直面してもそれ以上一致していなかったので、preg_replaceは1つだけ一致させようとしていた2つの代わりに空白スペース。

\を\ sに追加した後、作業を​​開始しました。

TL; DR:今後の生の出力を確認することを忘れないでください。

関連する問題