2011-07-07 6 views
2

私は任意の文字列にマッチさせたい Unicodeかどうかに関係なく、正規表現に一致する正規表現ですか?

$string = "<title>نص عربى English text</title>"; 

$pattern = '/<title>(regex.here)<\/title>/u'; 

if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) { 
print_r($matches); 
} else { 
echo 'No matches.'; 
}  

タイトルタグの間にリターンが

نص عربى English text 
+0

だから '/ i'または'/u'とは何ですか? –

答えて

2

PCREがunicode supportでコンパイルされている場合は、ユニコード標準の文字スペースに一致するだけです。

<?php 
preg_match_all('|<title>(\p{L}+)</title>|u', $string, ...); 

Unicodeのマッチングを可能にしますU -modifierを、注意してください。

+0

+1あなたのために、あなたは何を変更するか説明しています。 –

+0

@fsbに正規表現を適用する前に、エンコードを正規化しても問題ありません – D3VELOPER

2

$string = "<title>نص عربى English text</title>"; 

$pattern = '/<title>([\x{0000}-\xFFFF]*.*?)<\/title>/u'; 

if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) { 
print_r($matches); 
} else { 
echo 'No matches.'; 
}  
+0

アラビア語テキスト、またはUTF-8でエンコードされていない「Unicode text」の魔法使いでは機能しません。 (ドット)!! – D3VELOPER

+1

さらに、複数の終了タイトルタグを持つ入力から安全であるように、量限定子として '*?'を使用する方がよいでしょう。あるいは、キャプチャの中で '[^ <] *'を使う方が速いでしょう。 – Joey

+0

私は答えを編集しました - 今はどうですか? –

0

を試みるべきである(??????)のみマッチしますちょうど6文字の長さのもので、「?」にマッチします。 '任意の'文字と一致させるには、 '。'を使用します。それらの繰り返し数を一致させるには '。*'を使用してください。

それに似たHTMLタグは正規表現では簡単ではないので、その代わりにHTMLパーサーを使用してください。あなたは、ほぼ限り、あなたのテキストをファイルに貼り付ける「<」

+1

確かに彼は '(??????)'を置いて、正規表現の部分については確信していませんでした... –

1

コピーが含まれていないとして、動作します /<title>([^<]*)<\/title>/ ような何かを行うことができaproximationとして

は、間に何かを得るために、一致表現を変更しましたタイトルタグや印刷最初のマッチ:

<?PHP 
$string = "<title>ﻦﺻ ﻉﺮﺑﻯ English text</title>"; 
$pattern = '/<title>(.*)<\/title>/u'; 
if (preg_match_all($pattern, $string, $matches, PREG_SET_ORDER)) { 
    print($matches[0][1]."\n");              
} else { 
    echo 'No matches.'; 
} 
?> 

出力:

[email protected]:~$ php unitest.php 
نص عربى English text 
[email protected]:~$ 
+0

タイトルがUTF8でエンコードされたページにあったとしたらうまくいきます!ページがWindowsでエンコードされている場合-1256は動作しません – D3VELOPER

+1

@ D3VELOPER:正しい。 PCREで必要なことをするには正規表現を適用する前にエンコードを正規化する必要があります。 iconvを使用してwindows-1256からUTF-8に変換することができます。 –

+0

@rasjani: '(。*)'はやや攻撃的です。少なくとも '? 'をそこに入れてください:'(。*?) '。 –

関連する問題