Hi!
Deine beiden Fälle passen, weil im ersten Muster der . in foo.html ebenfalls in die Kategorie "beliebiges Zeichen" fällt und im zweiten Fall exakt passt. Das erste Muster lässt auch foo-html zu, das zweite nicht - und damit erfüllt das erste die Anforderung nicht mehr vollständig.
my $s = 'foo-html';
$s =~ /^(.).html$/;
print "$1 $&\n";
$s =~ /^(.).html$/;
print "$1 $&\n";Ausgabe
foo foo-html
foo foo-html
>
> Passt also auch in beiden Fällen. Warum ist /^(.\*).html$/ bezüglich der Aufgabenstellung falsch?
Ich weiß nicht, was in deiner Teststellung falsch ist. Das zweite Muster verlangt explizit einen . und darf bei - nicht matchen. Und gemäß Aufgabenstellung wurde explizit .html gewünscht und implizit darf dann -html nicht passen.
~~~php
<?php
$s = 'foo.html';
var_dump(preg_match('/^(.*).html$/', $s)); // int(1)
var_dump(preg_match('/^(.*)\.html$/', $s)); // int(1)
$s = 'foo-html';
var_dump(preg_match('/^(.*).html$/', $s)); // int(1)
var_dump(preg_match('/^(.*)\.html$/', $s)); // int(0)
Das Ergebnis von preg_match() ist die Anzahl, wie oft das Muster passt. Der zweite und der vierte Fall bringen beide das richtige Ergebnis: passt und passt nicht.
Lo!