|
|
|
| Здрасти,
подскажите роль след. рег. выражения
/[x81-xfe]?./
<?
preg_match_all("/[x81-xfe]?./",$added,$a1);
?>
|
спасибо | |
|
|
|
|
|
|
|
для: _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, означают ли они что-нибудь? :/ | |
|
|
|
|
|
|
|
для: _makar
(14.05.2006 в 20:35)
| | они означают 16-ричные коды символов | |
|
|
|
|
|
|
|
для: ec_stasis
(14.05.2006 в 20:38)
| | так а что получается что подборка в строке идёт по кодам символов а не по самим символам?? | |
|
|
|
|
|
|
|
для: 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 в 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 ($handle, filesize ($filename));
fclose ($handle);
$filename2 = "text2.txt";
$handle2 = fopen ($filename2, "r");
$new = fread ($handle2, filesize ($filename2));
fclose ($handle2);
TextDiff($old, $new)
?>
|
и в таблице символов с такими HEX значениями нет,,,, | |
|
|
|
|
|
|
|
для: _makar
(14.05.2006 в 22:15)
| | Виноват! В регулярных выражениях код сивола обозначается так: \xhh, где hh - собственно сам код символа. А тут даже не могу сказать, что это такое... :( | |
|
|
|
|
|
|
|
для: _makar
(14.05.2006 в 22:15)
| | Ну так сделай
<?
print_r($al);
print_r($bl);
?>
|
и увидишь, что находится по этому регулярному выражению.
ЗЫ: А вообще ф-ия работает как надо? | |
|
|
|
|
|
|
|
для: 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 ??? | |
|
|
|
|
|
|
|
для: 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] => x [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 символ,,,,,
почему, так и незнаю -// | |
|
|
|
|
|
|
|
для: _makar
(14.05.2006 в 21:10)
| | <?php
echo dechex(81) . "\n";
echo dechex(fe);
?>
а тут нет ничего удивительного, что ошибку выдает - эта ф-ия переводит ИЗ 10-ричной В 16-ричную. Надо было наоборот: hexdec() | |
|
|
|
|
|
|
|
для: ec_stasis
(14.05.2006 в 22:48)
| | да да пробывал ,) только ничего полезного - возвращает десятичное значение | |
|
|
|
|
|
|
|
для: _makar
(14.05.2006 в 23:03)
| | а ты потом chr() сделай, чтобы узнать, что это за символ,
<?
echo chr(hexdec(fe));
//или может можно сразу так:
echo chr(fe);
?>
|
только врядли это даст ответ на вопрос... | |
|
|
|
|
|
|
|
для: 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
я
так это может он определят первый и последний символ любого алфавита???
ИЛИ такого не бывает? :) | |
|
|
|
|
|
|
|
для: ec_stasis
(15.05.2006 в 00:25)
| | У меня такое ощущение что разбивает он строку по символам ascii в HEX от 08 - FF, только теперь вопрос почему в некоторых ключах по два символа??
и наскольок я заметил - в основном с латинскими буквами | |
|
|
|
|
|
|
|
для: _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] соответствует любому символу, кроме кириллической буквы... Но принцип, как это работает, я не знаю. | |
|
|
|
|
|
|
|
для: ec_stasis
(15.05.2006 в 01:37)
| | я тут покапался ) в общем в таблице ascii 0-127 символов стандартных потом до 255 - расширенный код. т.е. как я понимаю кирилица и др.
т.е. любой символ ( точка = любой символ кроме \n \r ) должен попадать под патерн.
к сожалению ф-ия не работает как положено если модифицировать.
я пробывал так
тогда любой символ подходит, но результат уже не тот... покапаюсь ещё - будет видно
во всяком случае Спасибо большое за помощь!!!! ;) | |
|
|
|
|
|
|
|
для: _makar
(15.05.2006 в 01:55)
| | Вы копаете не туда.
На 99% - это искаженное некорректным обращением с символьными строками
выражение вида которое означает необязательный символ с кодом в диапазоне 129-254 и еще ровно один любой символ | |
|
|
|