I built a simple code which parses all music folders inside several disks and put the list into an array.
The folders names begin with multiple spaces when they are categories, with a single space when they are "final folders". E.g. see this structure:
[0] => /Volumes/SAMPLES/  VOCALS/
[1] => /Volumes/SAMPLES/  VOCALS/  AFRICA/
[2] => /Volumes/SAMPLES/  VOCALS/ AcmeInc Club Vocals/
[3] => /Volumes/SAMPLES/  VOCALS/ AtomicInc Dance Vocals/
[4] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ AfroInc Zulu Vocals/
[5] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/
[6] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/SampleInc_Warriors_Ululation/
[7] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/SampleInc_Warriors_Drums/
and so on... I need to select the final folders only and tried several combinations of greedy and non greedy patterns, starting from the final $ E.g. the following path doesn't work:
$pattern = "#\/ ([:alnum:]+?)/$#i";
$matches  = preg_grep ($pattern, $root);
The expected result should have been:
[3] => /Volumes/SAMPLES/  VOCALS/ AcmeInc Club Vocals/
[4] => /Volumes/SAMPLES/  VOCALS/ AtomicInc Dance Vocals/
[5] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ AfroInc Zulu Vocals/
[6] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/
Instead I get all the folders or none or orphans. Please consider that special chars like &or ! could be in the folder name. Thank you for the suggestions, 3 days,tried everything, desperate, thanks!
Here is a working regex:
'~/(?:  +[^/\s]+)*/ [^/\s]+(?: +[^/\s]+)*/$~'
See regex demo
It matches:
/(?:  +[^/\s]+)* - a non-final subfolder (/, then more than 1 spaces, 1 or more characters other than space or /)/ - a forward slash with a space after it[^/\s]+ - 1 or more characters other than a whitespace or forward slash(?: +[^/\s]+)* - 0 or more sequences of ...
+ - 1 or more regular spaces[^/\s]+ - 1 or more characters other than a whitespace or forward slash/ - a forward slash$ - end of stringSee PHP code demo:
$ar = array("/Volumes/SAMPLES/  VOCALS/", 
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/",
    "/Volumes/SAMPLES/  VOCALS/ AcmeInc Club Vocals/",
    "/Volumes/SAMPLES/  VOCALS/ AtomicInc Dance Vocals/",
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/ AfroInc Zulu Vocals/",
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/",
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/SampleInc_Warriors_Ululation/",
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/SampleInc_Warriors_Drums/",
    "/Volumes/SAMPLES/  VOCALS/  AFRICA/ AfroInc Zulu Vocals/ Folder1/"
    );
$n = preg_grep('~/(?:  +[^/\s]+)*/ [^/\s]+(?: +[^/\s]+)*/$~', $ar);
print_r($n);
Result:
Array
(
    [2] => /Volumes/SAMPLES/  VOCALS/ AcmeInc Club Vocals/
    [3] => /Volumes/SAMPLES/  VOCALS/ AtomicInc Dance Vocals/
    [4] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ AfroInc Zulu Vocals/
    [5] => /Volumes/SAMPLES/  VOCALS/  AFRICA/ SampleInc Warriors/
)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With