Выдаліць <р> & NBSP; </p> ад канца радка?

Можа быць пачаткоўцам пытанне:

У мяне ёсць радок, як:

$string = '
this is what we need.




';

How can I remove the last characters, i.e.

 

, using PHP regex (not substr)?

I found a similar question here: remove
's from the end of a string
with solution: preg_replace('/(
)+$/', '', $string);

But changing this to: preg_replace('/(

 

)+$/', '', $string); does not work.

It throws PHP Warning: preg_replace(): Unknown modifier 'p'

I guess I am missing some escaping? Of the <> or the slashes?

Дзякуй за вашу дапамогу.

2
Звярніце ўвагу, што вам не спатрэбіцца + калі ёсць толькі адно ўваходжанне ў канцы радка (і ў залежнасці ад таго, ці вы хочаце, каб выдаліць толькі апошнія, ці некалькі асобнікаў).
дададзена аўтар Rob Hruska, крыніца
Звярніце ўвагу, што вам не спатрэбіцца + калі ёсць толькі адно ўваходжанне ў канцы радка (і ў залежнасці ад таго, ці вы хочаце, каб выдаліць толькі апошнія, ці некалькі асобнікаў).
дададзена аўтар Rob Hruska, крыніца
калі ласка str_replace ён будзе працаваць.
дададзена аўтар Praveen kalal, крыніца

9 адказы

Вы карыстаецеся слэш ў якасці падзельніка назваў паведамленняў, а таксама як частка вашага назваў паведамленняў (у які зачыняе р тэгу), так што вы павінны пазбегнуць. Такім чынам:

/(


)+$/

павінна быць

/(
<\/p>)+$/

А таксама, здаецца, што гэта не тая праца для рэгулярных выразаў, але гэта ваш выклік .. str_replace або < A HREF = "http://php.net/str_ireplace" отн = "NOFOLLOW"> str_ireplace будзе рабіць працу вельмі добра

5
дададзена
@mishu Дзякуй за ўказанне str_ireplace , але ён заменіць усе ўваходжанні

& NBSP;

. Там могуць быць радкі, якія паступаюць з некалькімі <�р> & NBSP; . У любым выпадку, я мог бы праверыць, калі супадаюць апошнія сымбалі, а затым выкарыстоўваць SubStr , каб выдаліць іх. # Wordpress? Не, не ўсё :) Pure PHP. # Ваш адказ лепш паказаць мне рэгуляркі памылкі, якую я зрабіў :)
дададзена аўтар Kai Noack, крыніца
Дзякуй за хуткі адказ. Я хацеў бы выкарыстаць str_replace, але не ўсе радкі, я атрымліваю ёсць

& NBSP

у рэшце рэшт. Вось чаму я думаў, што я павінен выкарыстоўваць рэгулярны выраз. # Як бы вы зрабілі гэта з str_replace тады?
дададзена аўтар Kai Noack, крыніца
Ці проста змяніць падзельнік #
дададзена аўтар Burhan Khalid, крыніца
@EchtEinfachTV паспрабаваць str_ireplace ( '

& NBSP;

', '', $ радок)
дададзена аўтар mishu, крыніца
@EchtEinfachTV вы выпадкова спрабуеце выдаліць пустыя абзацы з кантэнту, створанага з WordPress?
дададзена аўтар mishu, крыніца
@BurhanKhalid права; а таксама яшчэ адна рэч, каб заўважыць: калі гэтыя рэчы можна было б выдаліць, што толькі з канца індывіда рэгулярны выраз, якое адпавядае толькі канец (сімвал ^ выкарыстоўваецца для абазначэння канца) можа дапамагчы
дададзена аўтар mishu, крыніца
@EchtEinfachTV добра, я рады, што дапамог
дададзена аўтар mishu, крыніца

Вы карыстаецеся слэш ў якасці падзельніка назваў паведамленняў, а таксама як частка вашага назваў паведамленняў (у які зачыняе р тэгу), так што вы павінны пазбегнуць. Такім чынам:

/(


)+$/

павінна быць

/(
<\/p>)+$/

А таксама, здаецца, што гэта не тая праца для рэгулярных выразаў, але гэта ваш выклік .. str_replace або < A HREF = "http://php.net/str_ireplace" отн = "NOFOLLOW"> str_ireplace будзе рабіць працу вельмі добра

5
дададзена
@mishu Дзякуй за ўказанне str_ireplace , але ён заменіць усе ўваходжанні

& NBSP;

. Там могуць быць радкі, якія паступаюць з некалькімі <�р> & NBSP; . У любым выпадку, я мог бы праверыць, калі супадаюць апошнія сымбалі, а затым выкарыстоўваць SubStr , каб выдаліць іх. # Wordpress? Не, не ўсё :) Pure PHP. # Ваш адказ лепш паказаць мне рэгуляркі памылкі, якую я зрабіў :)
дададзена аўтар Kai Noack, крыніца
Дзякуй за хуткі адказ. Я хацеў бы выкарыстаць str_replace, але не ўсе радкі, я атрымліваю ёсць

& NBSP

у рэшце рэшт. Вось чаму я думаў, што я павінен выкарыстоўваць рэгулярны выраз. # Як бы вы зрабілі гэта з str_replace тады?
дададзена аўтар Kai Noack, крыніца
Ці проста змяніць падзельнік #
дададзена аўтар Burhan Khalid, крыніца
@EchtEinfachTV паспрабаваць str_ireplace ( '

& NBSP;

', '', $ радок)
дададзена аўтар mishu, крыніца
@EchtEinfachTV вы выпадкова спрабуеце выдаліць пустыя абзацы з кантэнту, створанага з WordPress?
дададзена аўтар mishu, крыніца
@BurhanKhalid права; а таксама яшчэ адна рэч, каб заўважыць: калі гэтыя рэчы можна было б выдаліць, што толькі з канца індывіда рэгулярны выраз, якое адпавядае толькі канец (сімвал ^ выкарыстоўваецца для абазначэння канца) можа дапамагчы
дададзена аўтар mishu, крыніца
@EchtEinfachTV добра, я рады, што дапамог
дададзена аўтар mishu, крыніца

Просты спосаб вы можаце зрабіць

$string = '
this is what we need.




'; $string = str_replace('


','',$string);
2
дададзена
гэта вельмі просты спосаб, каб выдаліць

& NBSP

дададзена аўтар Rakesh Singh, крыніца

Просты спосаб вы можаце зрабіць

$string = '
this is what we need.




'; $string = str_replace('


','',$string);
2
дададзена
гэта вельмі просты спосаб, каб выдаліць

& NBSP

дададзена аўтар Rakesh Singh, крыніца

Гэта павінна зрабіць трук:

$string = '
this is what we need.




'; $pattern = "/
]*>[\s| ]*<\/p>/"; $string = preg_replace($pattern, '', $string);

This would replace all empty

, not just those containing  

0
дададзена

Добры спосаб справіцца з касымі рысамі, калі вы пераходзіце на ўтрыманне HTML (або URL) заключаецца ў выкарыстанні іншых падзельнікаў, чым слэш, напрыклад:

$result = preg_replace('~(?>


)+$~', '', $string);

то вам не трэба, каб пазбегнуць касых чорт.

Звярніце ўвагу, што вы можаце выдаліць усе, што бескарысна з:

$result = preg_replace('~
 (?>
    <(\w++)[^>]*+>(?>\s++| |
</\1> # empty tags | # OR (?>\s++| |
0
дададзена

Добры спосаб справіцца з касымі рысамі, калі вы пераходзіце на ўтрыманне HTML (або URL) заключаецца ў выкарыстанні іншых падзельнікаў, чым слэш, напрыклад:

$result = preg_replace('~(?>


)+$~', '', $string);

то вам не трэба, каб пазбегнуць касых чорт.

Звярніце ўвагу, што вы можаце выдаліць усе, што бескарысна з:

$result = preg_replace('~
 (?>
    <(\w++)[^>]*+>(?>\s++| |
</\1> # empty tags | # OR (?>\s++| |
0
дададзена

Не выкарыстоўваючы рэгулярныя выразы, але гарантавана выдаліць толькі радок, калі яна знаходзіцца ў канцы:

$string = '



the previous and next should remain


nbsp


this is what we need.













'; $lenString = strlen($string); $remove = '


'; $lenRemove = strlen($remove); while (strrpos($string, $remove) === $lenString - $lenRemove) { $string = substr($string, 0, -$lenRemove); $lenString = strlen($string); } echo $string, PHP_EOL;

this prints

 

the previous and next   should remain

nbsp

this is what we need.

0
дададзена

Не выкарыстоўваючы рэгулярныя выразы, але гарантавана выдаліць толькі радок, калі яна знаходзіцца ў канцы:

$string = '



the previous and next should remain


nbsp


this is what we need.













'; $lenString = strlen($string); $remove = '


'; $lenRemove = strlen($remove); while (strrpos($string, $remove) === $lenString - $lenRemove) { $string = substr($string, 0, -$lenRemove); $lenString = strlen($string); } echo $string, PHP_EOL;

this prints

 

the previous and next   should remain

nbsp

this is what we need.

0
дададзена