2012-04-02 11 views
1

さて、私は立ち往生しています。 PHP、正規表現。私は、文字列があります。空白で区切られた英数字の一致

Это кириллические 23 78these are56 45latin76 letters here98 85 буквы.

をそして私は<B>タグとラテン文字、数字、スペースを含むストリングを囲むためにpreg_replace()を使用します。

Этокириллические23 78theseが45latin76手紙here98 85буквыをare56:サブストリングが、単に言葉が、限り、次の単語はラテン文字が含まれているとして、単語の集合ではありません。

マイベストショットでした:

$text = 'Это кириллические 23 78these are56 45latin76 letters here98 85 буквы.'; 
$regex = "/\d*\p{Latin}+(\d|\s|\p{Latin})*/iu"; 
preg_replace($regex, '<b>$0</b>', $text); 

しかし、それは "here98" だけでなく、次の "85" だけでなく、グラブ:

Этокириллические23 78theseは45latin76文字が85буквыをhere98 are56。

私はそれが正しい理由を理解していますが、正しいRegexを理解できません。

+0

[A-z0-9]を試しましたか? – hjpotter92

+0

@ TheJumpingFrog、[A-z0-9]はスペースを考慮していません。私はbla34 64blaのようなものを持っている必要があります。bla3464blaです。 –

+0

'([A-z0-9] | \ s)'は空白を取りますか? – hjpotter92

答えて

1

ラテン語+数字の単語に一致する必要はありませんが、前方に1単語、後方に1単語しか表示されません。

$regex = "/(?:[\p{Latin}\d]+)([\p{Latin}\d ]+)(?= [\p{Latin}\d]+)/iu"; 
preg_replace($regex, '<b>$1</b>', $text); 

PS:AAAAHあなたがグループ(?:...)と正の先読み(?=...)非キャプチャを使用する必要がありますので は私の知る限り、可変長ルック尻は、可能ではありません!ロシアのマフィア! ;-)

+0

Oh yesss。それは私の大切なことでもあります。私はいつも先見の明がありませんでした。時間が来たときに私が正しく使うことができなかったのも不思議ではありません。私は実際にカタカナ/ひらがな/漢字、キリル文字、ラテン文字のためにこの作業を行っています。ロシア語のマフィアに恋人をつかまえます。 :-) –

+0

@AriLinnどうしまして – kirilloid