Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析包含图像数据的文本文件_Php_Javascript_Regex - Fatal编程技术网

Php 解析包含图像数据的文本文件

Php 解析包含图像数据的文本文件,php,javascript,regex,Php,Javascript,Regex,我已经能够使用Imagemagick从文本文件中读取数据 我得到 0,0: (255,255,255, 0) #FFFFFF00 srgba(255,255,255,0) 1,0: (255,255,255, 0) #FFFFFF00 srgba(255,255,255,0) 2,0: (255,255,255, 0) #FFFFFF00 srgba(255,255,255,0) 40,23: (162,167, 32, 24) #A2A72018 srgba(162,

我已经能够使用Imagemagick从文本文件中读取数据

我得到

0,0: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)
1,0: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)
2,0: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)


40,23: (162,167, 32, 24)  #A2A72018  srgba(162,167,32,0.0941176)
41,23: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)
42,23: (162,166, 48, 40)  #A2A63028  srgba(162,166,48,0.156863)
43,23: (162,166, 47, 40)  #A2A62F28  srgba(162,166,47,0.156863)
我不擅长正则表达式我会用什么样的表达式 在开始时获取坐标,在结束时获取rgba

好的,我已经算出了正则表达式 这是它的一个标准
/rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]\.[0-9]{1-9}/gi
但最后一部分与rgba的小数部分不匹配

好吧,我知道这已经有一段时间了,我不确定我是否应该开始一个新的线程

但是我已经想出了如何去掉中间的两个部分,所有的括号 还有srgba,也是alpha为零的行,但不知怎么的,它在文本文件中留下了一个空白。如果有任何改进,任何人都可以看到

$fh = fopen("pcmanD.txt", "r");
$fg = fopen("pcmanJ.txt", "wt");
$new_array = ""; $parts = "";
while (!feof($fh)) {
    $line = fgets($fh);
    $lines[] = $line;
    $newword = "";
    $match1 ="/:\s?\s?\(\s?\s?\d+,\s?\s?\d+,\s?\s?\d+,\s?\s?\d+\)\s?\s?#[a-zA-Z0-9]{6,8}\s?\s?srgba/";
    $match2 ="/^\s\s?/";
    $match3 = "/\s\(/";
    $match4 = "/\)/";
    $match5 = "/[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},0[^\.]/";

    $parts1 = preg_replace($match1,"", $line );
    $parts2 = preg_replace($match2,"", $parts1 );
    $parts3 = preg_replace($match3,",", $parts2 );
    $parts4 = preg_replace($match4,"", $parts3 );
    $parts5 = preg_replace($match5,"",$parts4);


    echo "<pre>";
    print_r($parts5);
    echo "</pre>";

    fwrite($fg, $parts5);
} 

fclose($fg);
fclose($fh);
这应将坐标向下拉入捕获组1,将RGBA值向下拉入组2。不过,请注意,如果这对您很重要的话,使用字符串操作可能更有效。您可以在:上拆分字符串以获取坐标,然后在srgba上拆分并切掉颜色值的最后一个字符。

示例1: 如果有多行$input

密码 输出 例2: 如果您有单行$input和更深的正则表达式:

密码 输出 它很简单:使用\d+捕获数字,注意,和:字面上,对于可选的空格,使用\s*,转义\和\完成。*另请参阅和,以获取一些有用的工具或更好的教程。\s不仅仅用于空格。它还匹配换行符、回车符、制表符和空格[\n\r\t]。
$thisisit[] = "";
$thisisit2[] = "";
$countThis = 0;
$fh = fopen("sometext.txt", "r");
$new_array = ""; $parts = "";
while (!feof($fh)) {
    $line = fgets($fh);
    $line2 = $line;
    $newword = "";
    $match1 ="/^\s*?[\d]+,[\d]+/";
    $parts1 = preg_match($match1, $line, $regs);
    foreach($regs as $key => $lame) {
        $thisisit[] = $lame;
    }
    $match2 ="/(?:(\d{1,3},\d{1,3},))(\d{1,3},\d{1,3},\d{1,3},[01][\.]?[\d]*)/";
    $parts2 = preg_match($match2, $line2, $regs2);
    foreach($regs2 as $key2 => $lame2) {
        $thisisit2[] =$lame2;
    }
    $countLame = count($thisisit);
} 

echo "</script>";
$newCounter = 0;
for($i = 0; $i < (500); $i++) {
    echo  $thisisit[$i] . "<br />";
    echo $thisisit2[$newCounter] . "<br />" ;
    $newCounter = $newCounter +4;
}
fclose($fh);
 42,23,162,166,48,0.156863
 43,23,162,166,47,0.156863
 44,23,167,170,67,0.219608
 45,23,162,166,47,0.156863
 46,23,167,170,67,0.219608
 47,23,162,166,37,0.117647
 48,23,162,167,32,0.0941176
                                      86,23,163,167,40,0.12549
 87,23,160,164,47,0.164706
 88,23,188,190,122,0.352941
 86,24,233,234,197,0.486275
 87,24,251,250,250,1
 88,24,251,250,250,1
 89,24,251,250,250,1
> '0,0: (255,255,255,  0)'.match(/^([^:]+) *: *\(([^)]+)\)/)
[ '0,0: (255,255,255,  0)',
  '0,0',
  '255,255,255,  0',
  index: 0,
  input: '0,0: (255,255,255,  0)' ]
/^(\d+,\d+):.*\(([^)]*)\)$/
$input = '
    0,0: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)
    43,23: (162,166, 47, 40)  #A2A62F28  srgba(162,166,47,0.156863)
';
preg_match_all('~^\s*(.+?):.+srgba\((.+?)\)\s*$~m', $input, $match);
print_r($match);
Array
(
    [0] => Array
        (
            [0] => 0,0: (255,255,255,  0)  #FFFFFF00  srgba(255,255,255,0)
            [1] => 43,23: (162,166, 47, 40)  #A2A62F28  srgba(162,166,47,0.156863)
        )
    [1] => Array
        (
            [0] => 0,0
            [1] => 43,23
        )
    [2] => Array
        (
            [0] => 255,255,255,0
            [1] => 162,166,47,0.156863
        )
)
$input = '43,23: (162,166, 47, 40)  #A2A62F28  srgba(162,166,47,0.156863)';
preg_match('~^\s*(\d+),\s*(\d+):.+srgba\(\s*(\d+),\s*(\d+),\s*(\d+),\s*(.+?)\)\s*$~m', $input, $match);
print_r($match);
Array
(
    [0] => 43,23: (162,166, 47, 40)  #A2A62F28  srgba(162,166,47,0.156863)
    [1] => 43
    [2] => 23
    [3] => 162
    [4] => 166
    [5] => 47
    [6] => 0.156863
)