2011-08-02 7 views
3

私が作業しているウェブサイトが新しいバージョンのPHPで別のサーバに移動したときに、奇妙なことが起こりました。 3つの異なるサーバーで正常に動作していた正規表現は、動作を拒否し、常に0を返します。
これは、元の正規表現がある:それはだった前php 5.3.6私の正規表現パターンが壊れる

/\A(?P<text>[[:alpha:]]{4})[[:space:]](?P<password>[\p{L}\p{N}]{3,})[[:space:]](?P<digit1>[[:digit:]]{2,4})[[:space:]](?P<digit2>[[:digit:]]{1,2})\z/u 

パスワードは、ユニコードでなければならなかっただけの[[:alnum:]]をしかし、クライアントとのいくつかの問題がありました。

/\A(?<text>[[:alpha:]]{4}) (?<password>[[:alnum:]]{3,}) (?<digit1>[[:digit:]]{2,4}) (?<digit2>[[:digit:]]{1,2})\z/u 
/\A(?<text>[\p{L}]{4}) (?<password>[\p{L}\p{N}]{3,}) (?<digit1>\d{2,4}) (?<digit2>\d{1,2})\z/u 

例のテキスト:ABCD 1a2b3c 100 50

これらのすべてがhttp://www.spaweditor.com/scripts/regex/index.php上でテストされ、完全に働いた
そして、これらは私が無駄にしようとしたものです。

誰にでも何が問題なのか教えていただけますか?私はそれがあなたが見てきた最も美しい正規表現ではないかもしれないが、それは期待どおりに動作する(または少なくとも今まで働いていた)ことを知っています。今、私はPHP(lol)を非難しています。

編集:
* http://regex.larsolavtorvik.com/
* http://www.spaweditor.com/scripts/regex/index.php
* http://www.pagecolumn.com/tool/pregtest.htm
* http://lumadis.be/regex/test_regex.php
、それはスラッシュとuで、完全に自分自身を私の正規表現を入力することができ、いくつかの他の人に:これらのサイトの最後のパターンをテストしましたフラグ。 これらのウェブサイトはすべて機能していましたが、他のサイトでは私のサーバーと同じではないことを確認しました。

PCREは、Unicode対応で...

編集:システム管理者は、10分前までは動作しませんでした...結局、何かを変えているようです:/誰かが正規表現のすべてが今仕事、この質問を閉じます。

+0

これは、PHPフォーラムでよく質問されます。おそらく、問題を絞り込むための正確な動作(実際/予想)を提供するバグ報告を提出することができます。 –

+0

まあ、私はそこに行く前にPHPで問題があることを確認したいと思います。もし私の正規表現のパターンが間違っていれば、PHPは非難されることはありません... – jurchiks

+0

"何も変わらず、正規表現は3つの他のサーバで動作し、独立した正規表現プログラムで動作します。推測。 ;) –

答えて

4

PCRE拡張バージョン(phpinfo() - > PCREライブラリバージョン)を確認してください。いくつかのサーバは< 8、バージョン≧8はユニコードしかサポートしていません。

Hereは、PHP 5.2でCentOSでこの問題を解決する方法の良い例です。PHP 5.3でも確認できます。

+0

さて、私はそれをやってみよう。編集:yeeeah、私たちは2006年2月のV6.6を持っています...奇妙な、本当に、最新のPHPとそのような古いライブラリ。 – jurchiks

+1

PHPからは問題ありません。使用しているLinuxディストリビューションによって異なります。デフォルトがCentOSの場合、それらは常に6.6をデフォルトのままにし、PHPはそれを使用します。 – donis

+0

ああ...はい、そのサーバーにCentOSがあります...しかし、私たちはいつもそのライブラリをアップグレードできますか? – jurchiks