dedlfix: .htaccess

Beitrag lesen

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!