2017-01-25 21 views
1

PHPでは、文字列を不変として扱うのが一般的です。場合によっては、文字列を「インプレース」に変更する必要があります。regex - 任意の文字の間の空白に一致する

私たちは、追加のアレイ作成アプローチを採用しています。

この配列には、ソース文字列のすべての文字を含める必要があります。

PHP(str_split)にはこの機能があります。 1つの問題は、マルチバイトエンコーディングを十分に処理できないことです。

セパレータ・シーケンスの入力パラメータとして正規表現を取るmb_split機能もあります。したがって

mb_split('.', '123') 

[''、 ''、 ''、 ']を返します。

BUT:

mb_split('', '123') 

戻り[ '123']。

だから私は、マルチバイト文字列のいずれかのバリエーション間の空きスペースにマッチする相手正規表現があると考えています。 〜実際の試合です

だから、 '123' のためには、

'1~2', '2~3' 

と一致する必要があります。それは\ bと同じですが、何でもあります。

これを行う正規表現のハックはありますか?

+1

何が必要ですか?これはXY問題のように聞こえます。 – chris85

+0

私はコーディングのインタビューに合格する準備をしている学生のグループのための最も単純なコードを提示する必要がある作業をしています。問題は、インプレース文字列の逆転です。 PHP言語を使用したソリューションプレゼンテーションが必要です。最良のコーディング慣行を促進するために、PHP文字列を不変としてカウントするためによく使われる手法を使用することに決めました。だから我々は、言語機能として文字列アクセサーを使用する権利がありません。代わりにその文字列から配列を作成し、それを処理して要素を入れ替え、結果の文字列に結合します。複雑なソリューションは使用できません。 – vian

+0

少なくともUTF-8で動作している場合は、すでにほぼ完璧な解決策です。 – vian

答えて

1

使用

preg_match_all('~\X~u', $s, $arr) 

$arr[0]は、すべての文字が含まれます。 \Xパターンmatches any Unicode grapheme/u修飾子は、正規表現エンジンが入力文字列をUnicode文字列として扱い、パターンをUnicodeに認識させるために必要です。

PHP demを参照してください。

関連する問題