2010-11-11 5 views
1

Si j'ai le texte suivantpreg_match prochain numéro de ligne

#Welcome to the world of Hello World Again 
#Hello World Again 
Hello World Again 

#Other Stuff 
Other 

Im en utilisant cette commande

preg_replace('/[^#|^ ]Hello.*/m', 'Hello Again', $content); 

Ma sortie continue à me donner

#Welcome to the world of Hello World Again 
#Hello World AgainHello Again 

#Other Stuff 
Other 

Ce que je veux est

#Welcome to the world of Hello World Again 
#Hello World Again 
Hello Again 

#Other Stuff 
Other 

Des idées pour lesquelles c'est, Merci pour votre aide

Répondre

1

Utilisez le début de la ligne et à la fin Matchers ^ et $, respectivement:

preg_replace('/^Hello.*$/m', 'Hello World Again', $content); 
+0

Et si vous ignorez le '#' –

+0

@ Angel.King.47, vous ne devez pas ignorer le '#'. Le '^' ancre l'expression sur le côté gauche de la chaîne. Cela signifie qu'il ne correspondra qu'aux lignes commençant par "Hello". –

+0

Merci qui a travaillé –

0

Vous remplacez le retour à la ligne. Essayez ceci:

preg_replace('/([^#|^ ])Hello.*/m', '\1Hello World Again', $content); 

Il comprend tout par correspondance [^#|^ ] dans la chaîne de remplacement.

Alternativement, comprennent un saut de ligne dans votre chaîne de remplacement:

preg_replace('/[^#|^ ]Hello.*/m', PHP_EOL . 'Hello Again', $content); 

Vous pouvez également simplifier l'expression régulière:

`/^[# ]Hello.*$/' 
+0

puis-je obtenir regex à i gnore la ligne de fin et de début et ne remplace que les caractères internes –