регулярное выражение, чтобы соответствовать любой строке, будь то Unicode или нет? - PullRequest
2 голосов
/ 07 июля 2011

Я хочу сопоставить любую строку между тегами заголовка

$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

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

Если ваш PCRE скомпилирован с поддержкой юникода , вы можете просто сопоставить его с пробелом из стандарта Юникода.

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

Обратите внимание на u -модификатор, который позволяет сопоставлять юникод.

2 голосов
/ 07 июля 2011

попробуй с

$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.';
}    
1 голос
/ 07 июля 2011

Скопируйте, вставив в файл, изменив выражение соответствия, чтобы получить что-либо между тегами заголовка и напечатайте первое совпадение:

<?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.';
} 
?>

вывод:

rasjani@laptop:~$ php unitest.php 
نص عربى English text
rasjani@laptop:~$ 
0 голосов
/ 07 июля 2011

(??????) будет соответствовать только тому, что в точности равно 6 символам, и будет соответствовать только «?». Чтобы сопоставить «любой» символ, используйте «.» и для совпадения повторяющегося числа из них используйте '. *'

Подобрать HTML-теги подобным образом нелегко в регулярном выражении, поэтому вам, вероятно, следует использовать для этого анализатор HTML.

Как пример, вы могли бы сделать что-то вроде /<title>([^<]*)<\/title>/ Что почти сработает, если ваш текст не содержит '<' </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...