0

私はstackoverflowで検索しようとしており、Google経由ですべてを削除する方法を探しています。(ピリオド) 数字の間を除いて、文字列から。これまでのところ、私は運がありませんでした。

次のようなファイル名がたくさんあります。

this.is.a.file.1233
another.cool.file.v1.2.3
oh.wow.this.file.again.v1.2.4
guess.what.v1.2.3.is.now.out

ただし、次のように表示したいと思います。

this is a file 1233
another cool file v1.2.3
oh wow this file again v1.2.4
guess what v1.2.3 is now out

これは正規表現を使用して可能ですか? 私はそれをうまく行う方法を理解できず、ピリオドをスペースに置き換える簡単な方法を使用すると、バージョン番号の外観が台無しになります。

4

3 に答える 3

4

このパターンを preg_replace で使用できます。

$pattern = '~(?<=[a-z])\.|\.(?=[a-z])~i';

および置換としてのスペース。

またはより根本的な:

$pattern = '~(?<=\D)\.|\.(?=\D)~';
于 2013-07-05T03:20:26.697 に答える
2

ここでアサーションを使用して、ピリオドの前後に少なくとも 1 つの数字以外の文字が出現する必要があることを示すピリオドに一致させることができます。

(?<=\D)\.|\.(?=\D)

PHP では次のように使用します。

$str = preg_replace( '/(?<=\D)\.|\.(?=\D)/', ' ', $str);

このデモから、次のように表示されることがわかります。

this is a file 1233
another cool file v1.2.3
oh wow this file again v1.2.4
guess what v1.2.3 is now out
于 2013-07-05T03:14:24.840 に答える
0

次のようなパターンを試してください/\.(?![0-9])|(?<![0-9])\./:' '

コードでは、次のようになります。

$filename = preg_replace('/\.(?![0-9])|(?<![0-9])\./', ' ', $filename);
  1. 基本的に、私たちは 2 つのオプションを探しています/something|something/
  2. 最初のオプションは、数字が続かないピリオドです。これを確認するために、否定先読みを使用します。\.(?![0-9])
  3. 2 番目のオプションは、数字が前にないピリオドです。これには否定後読みを使用します。(?<![0-9])\.

いずれかが一致する場合、ピリオドが数字で囲まれていないことがわかり、置換できます。先読みと後読みを使用しているため、実際に一致するのはピリオドのみであり、単一のスペースに置き換えることができます。

あなたの例を考えると、これは以下を生成します:

this is a file 1233  
another cool file v1.2.3  
oh wow this file again v1.2.4  
guess what v1.2.3 is now out
于 2013-07-05T03:10:01.947 に答える