0

I want to automatically import data from .html file generated by some program to my database. This is the example code:

<TABLE WIDTH=100%><TD CLASS=pt><A NAME="motherboard">Płyta główna</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Właściwości płyty głównej:</B>
<TR><TD><TD><TD><TD>ID płyty głównej&nbsp;&nbsp;<TD>&lt;DMI&gt;
<TR><TD><TD><TD><TD>Nazwa płyty głównej&nbsp;&nbsp;<TD>VMware Virtual Platform
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Producent płyty głównej:</B>
<TR><TD><TD><TD><TD>Nazwa firmy&nbsp;&nbsp;<TD>VMware, Inc.
<TR><TD><TD><TD><TD>Informacje o produkcie&nbsp;&nbsp;<TD><A HREF="http://www.vmware.com" TARGET=blank>http://www.vmware.com</A>
<TR><TD><TD><TD><TD>Uaktualnienie BIOS'u&nbsp;&nbsp;<TD><A HREF="http://www.vmware.com" TARGET=blank>http://www.vmware.com</A>
<TR><TD><TD><TD><TD>Aktualizacja sterownika&nbsp;&nbsp;<TD><A HREF="http://www.aida64.com/driver-updates" TARGET=blank>http://www.aida64.com/driver-updates</A>
<TR><TD><TD><TD><TD>Uaktualnienia BIOS'u&nbsp;&nbsp;<TD><A HREF="http://www.aida64.com/bios-updates" TARGET=blank>http://www.aida64.com/bios-updates</A>
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME="memory">Pamięć</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Pamięć fizyczna:</B>
<TR><TD><TD><TD><TD>W sumie&nbsp;&nbsp;<TD>51200 MB
<TR><TD><TD><TD><TD>Użytych&nbsp;&nbsp;<TD>3194 MB
<TR><TD><TD><TD><TD>Wolne&nbsp;&nbsp;<TD>48006 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>6 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Pamięć wirtualna:</B>
<TR><TD><TD><TD><TD>W sumie&nbsp;&nbsp;<TD>58624 MB
<TR><TD><TD><TD><TD>Użytych&nbsp;&nbsp;<TD>3670 MB
<TR><TD><TD><TD><TD>Wolne&nbsp;&nbsp;<TD>54953 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>6 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Plik stronicowania:</B>
<TR><TD><TD><TD><TD>Plik stronicowania&nbsp;&nbsp;<TD>C:\pagefile.sys
<TR><TD><TD><TD><TD>Aktualny rozmiar&nbsp;&nbsp;<TD>7424 MB
<TR><TD><TD><TD><TD>Aktualne / szczytowe użycie&nbsp;&nbsp;<TD>0 MB / 0 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>0 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Physical Address Extension (PAE):</B>
<TR><TD><TD><TD><TD>Obsługiwane przez system operacyjny&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Obsługiwane przez procesor&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Aktywna&nbsp;&nbsp;<TD>Tak
</TABLE><BR><BR>

<!-- SW --><TABLE WIDTH=100%><TD CLASS=pt><A NAME="operating system">System operacyjny</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Właściwości systemu operacyjnego:</B>
<TR><TD><TD><TD><TD>Nazwa systemu operacyjnego&nbsp;&nbsp;<TD>Microsoft Windows Server 2012 R2 Standard
<TR><TD><TD><TD><TD>Język systemu operacyjnego&nbsp;&nbsp;<TD>Polski (Polska)
<TR><TD><TD><TD><TD>Język instalatora systemu operacyjnego&nbsp;&nbsp;<TD>Polski (Polska)
<TR><TD><TD><TD><TD>Typ jądra systemu operacyjnego&nbsp;&nbsp;<TD>Multiprocessor Free (64-bit)
<TR><TD><TD><TD><TD>Wersja systemu operacyjnego&nbsp;&nbsp;<TD>6.3.9600.18505 (Win2012R2 RTM)
<TR><TD><TD><TD><TD>Dodatek service pack systemu operacyjnego&nbsp;&nbsp;<TD>-
<TR><TD><TD><TD><TD>Data Instalacji&nbsp;&nbsp;<TD>2015-01-13
<TR><TD><TD><TD><TD>Katalog główny systemu operacyjnego&nbsp;&nbsp;<TD>C:\Users\Administrator\WINDOWS
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Własności systemu operacyjnego:</B>
<TR><TD><TD><TD><TD>Informacja dla debugger'a&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Dwubajtowe zestawy znaków DBCS&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Kontroler domeny&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Zabezpieczenia&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Sieć&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Zdalna sesja&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Tryb awaryjny&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Wolny procesor&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Usługi terminalowe&nbsp;&nbsp;<TD>Tak
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME="logical drives">Dyski logiczne</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD><TD><TD><TD><TD><TD><TD><TD>
<TR><TD><TD><TD><B>Dysk</B>&nbsp;&nbsp;<TD><B>Typ dysku</B>&nbsp;&nbsp;<TD CLASS=cc><B>System plików</B>&nbsp;&nbsp;<TD CLASS=cr><B>Rozmiar całkowity</B>&nbsp;&nbsp;<TD CLASS=cr><B>Użyte miejsce</B>&nbsp;&nbsp;<TD CLASS=cr><B>Wolne miejsce</B>&nbsp;&nbsp;<TD CLASS=cr><B>% wolnego</B>&nbsp;&nbsp;<TD CLASS=cc><B>Numer seryjny</B>
<TR><TD><TD><TD>A:&nbsp;&nbsp;<TD>Dysk wymienny&nbsp;&nbsp;<TD CLASS=cc>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cc>
<TR><TD><TD><TD>C: (System)&nbsp;&nbsp;<TD>Dysk lokalny&nbsp;&nbsp;<TD CLASS=cc>NTFS&nbsp;&nbsp;<TD CLASS=cr>204447 MB&nbsp;&nbsp;<TD CLASS=cr>152671 MB&nbsp;&nbsp;<TD CLASS=cr>51776 MB&nbsp;&nbsp;<TD CLASS=cr>25 %&nbsp;&nbsp;<TD CLASS=cc>CCFB-CFE9
<TR><TD><TD><TD>D: (Dane)&nbsp;&nbsp;<TD>Dysk lokalny&nbsp;&nbsp;<TD CLASS=cc>NTFS&nbsp;&nbsp;<TD CLASS=cr>511996 MB&nbsp;&nbsp;<TD CLASS=cr>1673 MB&nbsp;&nbsp;<TD CLASS=cr>510323 MB&nbsp;&nbsp;<TD CLASS=cr>100 %&nbsp;&nbsp;<TD CLASS=cc>8AF6-39CA
<TR><TD><TD><TD>E:&nbsp;&nbsp;<TD>Napęd dysków optycznych&nbsp;&nbsp;<TD CLASS=cc>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cc>
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME="physical drives">Dyski fizyczne</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD><TD><TD><TD><TD>
<TR><TD><TD CLASS=dt COLSPAN=5>[ Dysk nr 1 - VMware  Virtual disk (200 GB) ]
<TR><TD>&nbsp;
<TR><TD><TD><TD><B>Partycja</B>&nbsp;&nbsp;<TD><B>Typ partycji</B>&nbsp;&nbsp;<TD><B>Dysk</B>&nbsp;&nbsp;<TD CLASS=cr><B>Przesunięcie początkowe</B>&nbsp;&nbsp;<TD CLASS=cr><B>Długość partycji</B>
<TR><TD><TD><TD>#1 (Aktywna)&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>&nbsp;&nbsp;<TD CLASS=cr>1 MB&nbsp;&nbsp;<TD CLASS=cr>350 MB
<TR><TD><TD><TD>#2&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>C: (System)&nbsp;&nbsp;<TD CLASS=cr>351 MB&nbsp;&nbsp;<TD CLASS=cr>204448 MB
<TR><TD>&nbsp;
<TR><TD><TD CLASS=dt COLSPAN=5>[ Dysk nr 2 - VMware  Virtual disk (500 GB) ]
<TR><TD>&nbsp;
<TR><TD><TD><TD><B>Partycja</B>&nbsp;&nbsp;<TD><B>Typ partycji</B>&nbsp;&nbsp;<TD><B>Dysk</B>&nbsp;&nbsp;<TD CLASS=cr><B>Przesunięcie początkowe</B>&nbsp;&nbsp;<TD CLASS=cr><B>Długość partycji</B>
<TR><TD><TD><TD>#1&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>D: (Dane)&nbsp;&nbsp;<TD CLASS=cr>1 MB&nbsp;&nbsp;<TD CLASS=cr>511997 MB
</TABLE><BR><BR>

Probably the best way is to convert it into arrays. But I don't know how. I've tried to use http://simplehtmldom.sourceforge.net but still I don't know how to solve my problem. These tables are built in a strange way and I can't change it in a generator

The array should look:

Płyta główna
    Właściwości płyty głównej:
      ID płyty głównej  -> <DMI>
      Nazwa płyty głównej ->    VMware Virtual Platform

Pamięć
    Pamięć fizyczna:
      W sumie ->    51200 MB

It's the most complicated in - Dyski logiczne and Dyski fizyczne

Do you have an idea how import that?

Andrej229
  • 69
  • 1
  • 8

1 Answers1

0

In the absence of any other simpler process, it seems you are going to have to roll your own html comber. Using careful regex patterns against what I assume(hope) is a predictable invalid html structure, systematically capture the desired strings and place them into an array.

I am not going to do this entire job for you, because it doesn't pay me to do so... that's your job. However, I'll give you a head start and let you continue tweaking my process until it is satisfactory.

Here is your quasi-html content: (*note I had to escape the "'s in the $html to test my code.)

$html="<TABLE WIDTH=100%><TD CLASS=pt><A NAME=\"motherboard\">Płyta główna</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Właściwości płyty głównej:</B>
<TR><TD><TD><TD><TD>ID płyty głównej&nbsp;&nbsp;<TD>&lt;DMI&gt;
<TR><TD><TD><TD><TD>Nazwa płyty głównej&nbsp;&nbsp;<TD>VMware Virtual Platform
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Producent płyty głównej:</B>
<TR><TD><TD><TD><TD>Nazwa firmy&nbsp;&nbsp;<TD>VMware, Inc.
<TR><TD><TD><TD><TD>Informacje o produkcie&nbsp;&nbsp;<TD><A HREF=\"http://www.vmware.com\" TARGET=blank>http://www.vmware.com</A>
<TR><TD><TD><TD><TD>Uaktualnienie BIOS'u&nbsp;&nbsp;<TD><A HREF=\"http://www.vmware.com\" TARGET=blank>http://www.vmware.com</A>
<TR><TD><TD><TD><TD>Aktualizacja sterownika&nbsp;&nbsp;<TD><A HREF=\"http://www.aida64.com/driver-updates\" TARGET=blank>http://www.aida64.com/driver-updates</A>
<TR><TD><TD><TD><TD>Uaktualnienia BIOS'u&nbsp;&nbsp;<TD><A HREF=\"http://www.aida64.com/bios-updates\" TARGET=blank>http://www.aida64.com/bios-updates</A>
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME=\"memory\">Pamięć</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Pamięć fizyczna:</B>
<TR><TD><TD><TD><TD>W sumie&nbsp;&nbsp;<TD>51200 MB
<TR><TD><TD><TD><TD>Użytych&nbsp;&nbsp;<TD>3194 MB
<TR><TD><TD><TD><TD>Wolne&nbsp;&nbsp;<TD>48006 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>6 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Pamięć wirtualna:</B>
<TR><TD><TD><TD><TD>W sumie&nbsp;&nbsp;<TD>58624 MB
<TR><TD><TD><TD><TD>Użytych&nbsp;&nbsp;<TD>3670 MB
<TR><TD><TD><TD><TD>Wolne&nbsp;&nbsp;<TD>54953 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>6 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Plik stronicowania:</B>
<TR><TD><TD><TD><TD>Plik stronicowania&nbsp;&nbsp;<TD>C:\pagefile.sys
<TR><TD><TD><TD><TD>Aktualny rozmiar&nbsp;&nbsp;<TD>7424 MB
<TR><TD><TD><TD><TD>Aktualne / szczytowe użycie&nbsp;&nbsp;<TD>0 MB / 0 MB
<TR><TD><TD><TD><TD>Wykorzystanie&nbsp;&nbsp;<TD>0 %
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Physical Address Extension (PAE):</B>
<TR><TD><TD><TD><TD>Obsługiwane przez system operacyjny&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Obsługiwane przez procesor&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Aktywna&nbsp;&nbsp;<TD>Tak
</TABLE><BR><BR>

<!-- SW --><TABLE WIDTH=100%><TD CLASS=pt><A NAME=\"operating system\">System operacyjny</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD WIDTH=16><TD><TD>
<TR><TD><TD><TD COLSPAN=3><B>Właściwości systemu operacyjnego:</B>
<TR><TD><TD><TD><TD>Nazwa systemu operacyjnego&nbsp;&nbsp;<TD>Microsoft Windows Server 2012 R2 Standard
<TR><TD><TD><TD><TD>Język systemu operacyjnego&nbsp;&nbsp;<TD>Polski (Polska)
<TR><TD><TD><TD><TD>Język instalatora systemu operacyjnego&nbsp;&nbsp;<TD>Polski (Polska)
<TR><TD><TD><TD><TD>Typ jądra systemu operacyjnego&nbsp;&nbsp;<TD>Multiprocessor Free (64-bit)
<TR><TD><TD><TD><TD>Wersja systemu operacyjnego&nbsp;&nbsp;<TD>6.3.9600.18505 (Win2012R2 RTM)
<TR><TD><TD><TD><TD>Dodatek service pack systemu operacyjnego&nbsp;&nbsp;<TD>-
<TR><TD><TD><TD><TD>Data Instalacji&nbsp;&nbsp;<TD>2015-01-13
<TR><TD><TD><TD><TD>Katalog główny systemu operacyjnego&nbsp;&nbsp;<TD>C:\Users\Administrator\WINDOWS
<TR><TD>&nbsp;
<TR><TD><TD><TD COLSPAN=3><B>Własności systemu operacyjnego:</B>
<TR><TD><TD><TD><TD>Informacja dla debugger'a&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Dwubajtowe zestawy znaków DBCS&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Kontroler domeny&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Zabezpieczenia&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Sieć&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Zdalna sesja&nbsp;&nbsp;<TD>Tak
<TR><TD><TD><TD><TD>Tryb awaryjny&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Wolny procesor&nbsp;&nbsp;<TD>Nie
<TR><TD><TD><TD><TD>Usługi terminalowe&nbsp;&nbsp;<TD>Tak
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME=\"logical drives\">Dyski logiczne</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD><TD><TD><TD><TD><TD><TD><TD>
<TR><TD><TD><TD><B>Dysk</B>&nbsp;&nbsp;<TD><B>Typ dysku</B>&nbsp;&nbsp;<TD CLASS=cc><B>System plików</B>&nbsp;&nbsp;<TD CLASS=cr><B>Rozmiar całkowity</B>&nbsp;&nbsp;<TD CLASS=cr><B>Użyte miejsce</B>&nbsp;&nbsp;<TD CLASS=cr><B>Wolne miejsce</B>&nbsp;&nbsp;<TD CLASS=cr><B>% wolnego</B>&nbsp;&nbsp;<TD CLASS=cc><B>Numer seryjny</B>
<TR><TD><TD><TD>A:&nbsp;&nbsp;<TD>Dysk wymienny&nbsp;&nbsp;<TD CLASS=cc>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cc>
<TR><TD><TD><TD>C: (System)&nbsp;&nbsp;<TD>Dysk lokalny&nbsp;&nbsp;<TD CLASS=cc>NTFS&nbsp;&nbsp;<TD CLASS=cr>204447 MB&nbsp;&nbsp;<TD CLASS=cr>152671 MB&nbsp;&nbsp;<TD CLASS=cr>51776 MB&nbsp;&nbsp;<TD CLASS=cr>25 %&nbsp;&nbsp;<TD CLASS=cc>CCFB-CFE9
<TR><TD><TD><TD>D: (Dane)&nbsp;&nbsp;<TD>Dysk lokalny&nbsp;&nbsp;<TD CLASS=cc>NTFS&nbsp;&nbsp;<TD CLASS=cr>511996 MB&nbsp;&nbsp;<TD CLASS=cr>1673 MB&nbsp;&nbsp;<TD CLASS=cr>510323 MB&nbsp;&nbsp;<TD CLASS=cr>100 %&nbsp;&nbsp;<TD CLASS=cc>8AF6-39CA
<TR><TD><TD><TD>E:&nbsp;&nbsp;<TD>Napęd dysków optycznych&nbsp;&nbsp;<TD CLASS=cc>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cr>&nbsp;&nbsp;<TD CLASS=cc>
</TABLE><BR><BR>

<TABLE WIDTH=100%><TD CLASS=pt><A NAME=\"physical drives\">Dyski fizyczne</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16>&nbsp;<TD WIDTH=16><TD><TD><TD><TD><TD>
<TR><TD><TD CLASS=dt COLSPAN=5>[ Dysk nr 1 - VMware  Virtual disk (200 GB) ]
<TR><TD>&nbsp;
<TR><TD><TD><TD><B>Partycja</B>&nbsp;&nbsp;<TD><B>Typ partycji</B>&nbsp;&nbsp;<TD><B>Dysk</B>&nbsp;&nbsp;<TD CLASS=cr><B>Przesunięcie początkowe</B>&nbsp;&nbsp;<TD CLASS=cr><B>Długość partycji</B>
<TR><TD><TD><TD>#1 (Aktywna)&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>&nbsp;&nbsp;<TD CLASS=cr>1 MB&nbsp;&nbsp;<TD CLASS=cr>350 MB
<TR><TD><TD><TD>#2&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>C: (System)&nbsp;&nbsp;<TD CLASS=cr>351 MB&nbsp;&nbsp;<TD CLASS=cr>204448 MB
<TR><TD>&nbsp;
<TR><TD><TD CLASS=dt COLSPAN=5>[ Dysk nr 2 - VMware  Virtual disk (500 GB) ]
<TR><TD>&nbsp;
<TR><TD><TD><TD><B>Partycja</B>&nbsp;&nbsp;<TD><B>Typ partycji</B>&nbsp;&nbsp;<TD><B>Dysk</B>&nbsp;&nbsp;<TD CLASS=cr><B>Przesunięcie początkowe</B>&nbsp;&nbsp;<TD CLASS=cr><B>Długość partycji</B>
<TR><TD><TD><TD>#1&nbsp;&nbsp;<TD>NTFS&nbsp;&nbsp;<TD>D: (Dane)&nbsp;&nbsp;<TD CLASS=cr>1 MB&nbsp;&nbsp;<TD CLASS=cr>511997 MB
</TABLE><BR><BR>";

Here is the code I applied to it:

    $parent_regex="/<TABLE.*?<A[^>]*>(.*?)<\/A>.*?<\/TABLE><TABLE>(.*?)<\/TABLE>/s";
    $child_regex1="/<TR><TD><TD><TD COLSPAN=3><B>(.*?)<\/B>(.*?)<TR><TD>&nbsp;/s";
    $child_regex2="/<TR><TD><TD><TD>(<B>.*<\/B>)\s+(.*)/s";
    $grandchild_regex1="/<TR><TD><TD><TD><TD>(.*?)&nbsp;&nbsp;<TD>(.*)/";
    $grandchild_regex2a="/<TR>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>.*?<B>(.*?)<\/B>\s(.*)/s";
    $grandchild_regex2b="/<TR><TD><TD><TD>([A-Z]:.*?)&nbsp;&nbsp;<TD[^>]*?>(.*?)<TD[^>]*?>(.*?)<TD[^>]*?>(.*?)<TD[^>]*?>(.*?)<TD[^>]*?>(.*?)<TD[^>]*?>(.*?)<TD[^>]*?>(.*))/";

if(preg_match_all($parent_regex,$html,$matches1)){
    $parents=$matches1[1];
    foreach($matches1[2] as $p_index=>$child_block){
        if(preg_match_all($child_regex1,$child_block,$matches2)){
            foreach($matches2[2] as $c_index=>$grandchild_block){
                if(preg_match_all($grandchild_regex1,$grandchild_block,$matches3)){
                    $pairs=array_chunk($matches3[1],2);
                    foreach($pairs as $pair){
                        $result[$matches1[1][$p_index]][$matches2[1][$c_index]][$pair[0]]=$pair[1];
                    }
                }else{
                    echo "no matches3\n";
                    //echo "$grandchild_block\n\n";
                }
            }
        }else{
            // unexpected table structure, replace previous line's else with a new capture condition
            //}elseif(preg_match($child_regexa,$child_block,$matches2)){
            //foreach($matches2[1] as $c_index=>$grandchild_block){
            //  if(preg_match_all($grandchild_regex2a,$grandchild_block,$matches3a)){
            //  if(preg_match_all($grandchild_regex2b,$grandchild_block,$matches3b)){
            //echo "childblock=$child_block\n";
            //var_export($matches2[1]);
            //echo "\n\n";
            //var_export($matches2[2]);
            //echo "\n\n";
            // recomb the block and manipulate
        }
    }    
}else{
    // check regex pattern and $html
    echo "no matches1";
}
var_export($result);

Here is a Demo that will display a couple of subsections that weren't captured properly and the array that is built.

Progressively echo out any blocks of text that aren't captured and use https://regex101.com/ to create and check your regex patterns for success.

This seems like a nasty rabbit hole of a job, so I wish you strength and determination.

mickmackusa
  • 43,625
  • 12
  • 83
  • 136