préanalyse je l'expression suivante:Faire insensible à la casse de négatif
$exp = "/^(?!.*?that).*$/";
qui est censé correspondre à une ligne qui ne contient pas « que ».
I ont les trois phrases suivantes:
$str = array(
"I like this sentence.", #line1
"I like that sentence.", #line2
"I link THAT sentence." #line3
);
La correspondance est sensible à la casse, et donc que les lignes 1 et 3 sont mis en correspondance. Jusqu'ici tout va bien.
Cependant, je voudrais rendre insensible à la casse, de sorte qu'il correspond uniquement à la ligne 1. J'ai essayé avec un modificateur en ligne, à savoir « (... -i?) »:
$exp = "/^(?!.*?(?i:that)).*$/";
et comme un drapeau, à savoir "/ .../i":
$exp = "/^(?!.*?that).*$/i";
mais en vain.
Je lancer la recherche avec la boucle suivante:
foreach($str as $s) {
preg_match_all($exp, $s, $matches);
var_dump($matches);
}
avec sortie:
array (size=1)
0 =>
array (size=1)
0 => string 'I like this sentence.' (length=21)
array (size=1)
0 =>
array (size=0)
empty
array (size=1)
0 =>
array (size=1)
0 => string 'I link THAT sentence.' (length=21)
et une démonstration en ligne est disponible ici: https://regex101.com/r/bs9rzF/1
Je voudrais remercier pour tous les conseils sur comment je peux rendre mon expression régulière insensible à la casse.
EDIT: J'utilisais incorrectement "? -i" au lieu de "? -i", comme certains contributeurs le signalent correctement. Fixé maintenant
'$ exp ="/^(?!.*? Cela). * $/I ";' est correct et devrait fonctionner. Cependant, '(? -i: ...' désactive le modificateur i. Pour l'activer: '(? I: ...' –
Votre deuxième essai avec '$ exp ="/^(?!.??). * $/i ";' [** devrait fonctionner. **] (https://3v4l.org/sEXhn) – revo
En effet, il semble que le problème qui a rendu la recherche sensible à la casse indépendamment du modificateur i était quelque part else: le drapeau de u est également nécessaire pour les langues avec des accents et d'autres alphabets, c'est-à-dire "//((!!.*?)". * $/ui "' Merci pour vos réponses rapides! – msoutopico