Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: /[x81-xfe]?./
 
 автор: _makar   (14.05.2006 в 20:07)   письмо автору
 
 

Здрасти,
подскажите роль след. рег. выражения

/[x81-xfe]?./


<?

preg_match_all
("/[x81-xfe]?./",$added,$a1);

?>


спасибо

   
 
 автор: _makar   (14.05.2006 в 20:35)   письмо автору
 
   для: _makar   (14.05.2006 в 20:07)
 

ответ regexbuddy:


// [x81-xfe]?.
//
// Match a single character present in the list below «[x81-xfe]?»
// Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
// One of the characters "x8" «x8»
// A character in the range between "1" and "x" «1-x»
// One of the characters "fe" «fe»
// Match any single character that is not a line break character «.»


в заблуждение вводят какие-то x8 и fe, означают ли они что-нибудь? :/

   
 
 автор: ec_stasis   (14.05.2006 в 20:38)   письмо автору
 
   для: _makar   (14.05.2006 в 20:35)
 

они означают 16-ричные коды символов

   
 
 автор: _makar   (14.05.2006 в 20:52)   письмо автору
 
   для: ec_stasis   (14.05.2006 в 20:38)
 

так а что получается что подборка в строке идёт по кодам символов а не по самим символам??

   
 
 автор: _makar   (14.05.2006 в 21:10)   письмо автору
 
   для: ec_stasis   (14.05.2006 в 20:38)
 

незнаю правильно или нет но вот попробовал узнать что за 16-ричные такие символы...
таким образом

<?php
echo dechex(81) . "\n";
echo 
dechex(fe);
?>


получил ответ:

51 
Notice: Use of undefined constant fe - assumed 'fe' in c:\program files\easyphp1-8\www\scripts\hex.php on line 4
0



немогу понять... как же всё таки оно приминяется к строке?

   
 
 автор: _makar   (14.05.2006 в 22:15)   письмо автору
 
   для: _makar   (14.05.2006 в 21:10)
 

вот сама функция


<?php
function TextDiff($old$new) {
        
$mode true;
        if(! 
is_array($old)) {
            
$bodyA explode("\n"$old);
            
$bodyB explode("\n"$new);
            
$mode false;
        }else {
            
$bodyA $old;
            
$bodyB $new;
        }

        
$result['added'] = array_diff_assoc($bodyA$bodyB);
        
$result['deleted'] = array_diff_assoc($bodyB$bodyA);
        
        if(
$mode)
            return 
$result;
        if(
count($result['added']) >= count($result['deleted']))
            
$ar $result['added'];
        else
            
$ar $result['deleted'];
            
        
$retval '';
        foreach(
$ar as $k=>$v) {
        
            
$added = isset($result['added'][$k]) ? $result['added'][$k] : "";
            
$deleted = isset($result['deleted'][$k]) ? $result['deleted'][$k] : "";
            
            
preg_match_all("/[x81-xfe]?./",$added,$a1);

            
preg_match_all("/[x81-xfe]?./",$deleted,$b1);
            
            
$p TextDiff($b1[0],$a1[0]);
            
            foreach(
$p['added'] as $key=>$value){
                
$b1[0][$key] = "<font color=lime>$value</font>";
            }
            
            
$deleted join("",$b1[0]);
            foreach(
$p['deleted'] as $key=>$value){
                
$a1[0][$key] = "<s><font color=red>$value</font></s>";
            }
            
$added join("",$a1[0]);
            
$retval .= "<br><br>ligne ".($k+1);
            
$retval .= "<br>[old]$added";
            
$retval .= "<br>[new]$deleted";
        }
        
#return $retval;
        
print $retval;
    }
    
$filename "text.txt";
$handle fopen ($filename"r");
$old fread ($handlefilesize ($filename));
fclose ($handle);

$filename2 "text2.txt";
$handle2 fopen ($filename2"r");
$new fread ($handle2filesize ($filename2));
fclose ($handle2);

TextDiff($old$new)
?>


и в таблице символов с такими HEX значениями нет,,,,

   
 
 автор: ec_stasis   (14.05.2006 в 22:45)   письмо автору
 
   для: _makar   (14.05.2006 в 22:15)
 

Виноват! В регулярных выражениях код сивола обозначается так: \xhh, где hh - собственно сам код символа. А тут даже не могу сказать, что это такое... :(

   
 
 автор: ec_stasis   (14.05.2006 в 22:50)   письмо автору
 
   для: _makar   (14.05.2006 в 22:15)
 

Ну так сделай

<?
print_r
($al);
print_r($bl);
?>


и увидишь, что находится по этому регулярному выражению.

ЗЫ: А вообще ф-ия работает как надо?

   
 
 автор: _makar   (14.05.2006 в 23:02)   письмо автору
 
   для: ec_stasis   (14.05.2006 в 22:50)
 

непоказывает print_r($al); =/

Notice: Undefined variable: al in c:\program files\easyphp1-8\www\scripts\diff-china\textdiff.php on line 36

а функция работает нормально, только мне необходимо объяснить как и что, а этот патерн @#?...
может на самом деле hex и означает все значения от x8 - fe ???

   
 
 автор: _makar   (14.05.2006 в 23:46)   письмо автору
 
   для: ec_stasis   (14.05.2006 в 22:50)
 

короче получилось увидеть что там такое выходит


<?

Array ( [0] => может на самом деле hex и означает все значения от x8 fe ?? ) 
Array ( [
0] => м [1] => о [2] => ж [3] => е [4] => т [5] => [6] => н [7] => а [8] => [9] => с [10] => а [11] => м [12] => о [13] => м [14] => [15] => д [16] => е [17] => л [18] => е [19] => [20] => he [21] => [22] => и [23] => [24] => о [25] => з [26] => н [27] => а [28] => ч [29] => а [30] => е [31] => т [32] => [33] => в [34] => с [35] => е [36] => [37] => з [38] => н [39] => а [40] => ч [41] => е [42] => н [43] => и [44] => я [45] => [46] => о [47] => т [48] => [49] => x8 [50] => [51] => - [52] => [53] => fe [54] => [55] => ?? [56] => ? )

?>


разбивает толи на 2 толи на 1 символ,,,,,
почему, так и незнаю -//

   
 
 автор: ec_stasis   (14.05.2006 в 22:48)   письмо автору
 
   для: _makar   (14.05.2006 в 21:10)
 

<?php
echo dechex(81) . "\n";
echo dechex(fe);
?>

а тут нет ничего удивительного, что ошибку выдает - эта ф-ия переводит ИЗ 10-ричной В 16-ричную. Надо было наоборот: hexdec()

   
 
 автор: _makar   (14.05.2006 в 23:03)   письмо автору
 
   для: ec_stasis   (14.05.2006 в 22:48)
 

да да пробывал ,) только ничего полезного - возвращает десятичное значение

   
 
 автор: ec_stasis   (15.05.2006 в 00:25)   письмо автору
 
   для: _makar   (14.05.2006 в 23:03)
 

а ты потом chr() сделай, чтобы узнать, что это за символ,

<?
echo chr(hexdec(fe));
//или может можно сразу так:
echo chr(fe);
?>

только врядли это даст ответ на вопрос...

   
 
 автор: _makar   (15.05.2006 в 00:29)   письмо автору
 
   для: ec_stasis   (15.05.2006 в 00:25)
 

Notice: Use of undefined constant fe - assumed 'fe' in c:\program files\easyphp1-8\www\scripts\diff-china\textdiff.php on line 13
ю

Notice: Use of undefined constant ff - assumed 'ff' in c:\program files\easyphp1-8\www\scripts\diff-china\textdiff.php on line 13
я

так это может он определят первый и последний символ любого алфавита???
ИЛИ такого не бывает? :)

   
 
 автор: _makar   (15.05.2006 в 00:50)   письмо автору
 
   для: ec_stasis   (15.05.2006 в 00:25)
 

У меня такое ощущение что разбивает он строку по символам ascii в HEX от 08 - FF, только теперь вопрос почему в некоторых ключах по два символа??

[20] => he 


и наскольок я заметил - в основном с латинскими буквами

   
 
 автор: ec_stasis   (15.05.2006 в 01:37)   письмо автору
 
   для: _makar   (15.05.2006 в 00:50)
 

Если убрать точку и регвыр, то товыдает следующее:

Array
(
[0] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
[14] =>
[15] =>
[16] =>
[17] =>
[18] =>
[19] =>
[20] => h
[21] => e
[22] => x
[23] =>
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] =>
[39] =>
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] =>
[51] => x
[52] => 8
[53] =>
[54] =>
[55] =>
[56] => f
[57] => e
[58] =>
[59] => ?
[60] => ?
[61] => ?
[62] =>
)

)

Из чего можно сделать вывод, что [x81-xfe] соответствует любому символу, кроме кириллической буквы... Но принцип, как это работает, я не знаю.

   
 
 автор: _makar   (15.05.2006 в 01:55)   письмо автору
 
   для: ec_stasis   (15.05.2006 в 01:37)
 

я тут покапался ) в общем в таблице ascii 0-127 символов стандартных потом до 255 - расширенный код. т.е. как я понимаю кирилица и др.
т.е. любой символ ( точка = любой символ кроме \n \r ) должен попадать под патерн.

к сожалению ф-ия не работает как положено если модифицировать.
я пробывал так

[x81-xfe]*?.

тогда любой символ подходит, но результат уже не тот... покапаюсь ещё - будет видно


во всяком случае Спасибо большое за помощь!!!! ;)

   
 
 автор: Trianon   (15.05.2006 в 10:26)   письмо автору
 
   для: _makar   (15.05.2006 в 01:55)
 

Вы копаете не туда.
На 99%
[x81-xfe]*?. 
- это искаженное некорректным обращением с символьными строками
выражение вида
[\x81-\xfe]*?.
которое означает необязательный символ с кодом в диапазоне 129-254 и еще ровно один любой символ

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования