regular expression "non-word" characters
5 отговора
326 прегледа
regular expression "non-word" characters
ам ...
искам да махна всички символи от стринг който са "non-word" без - (тире) и " (двоина кавичка)
доста се рових из мануала, но не открих нещо подходящо. Идеята да ги изброявам с разделител | не ми се вижда много елегантна
предложения ?
Break The UnBreakable
искам да махна всички символи от стринг който са "non-word" без - (тире) и " (двоина кавичка)
доста се рових из мануала, но не открих нещо подходящо. Идеята да ги изброявам с разделител | не ми се вижда много елегантна
предложения ?
Break The UnBreakable
Re: regular expression "non-word" characters
$str = preg_replace('#[^\w\-"]#', '', $str);
Everything louder than everything else...
Everything louder than everything else...
Редактирано от Dakota на
Re: regular expression "non-word" characters
Учещ, знам за \W, но това включва и двата символа (тире и кавичка) които искам да останат.
предложението на Dakota ще свърши работа макар че не мога да си обясня защо в следния израз:
$string = "-!@#$%^&*()=+_'.\",";
$string = preg_replace('#[^\w\-" ]#', '', $string);
ми връща и долна четра, а като махна тирето нямам такива проблеми. Но това ще го преживея
Break The UnBreakable
предложението на Dakota ще свърши работа макар че не мога да си обясня защо в следния израз:
$string = "-!@#$%^&*()=+_'.\",";
$string = preg_replace('#[^\w\-" ]#', '', $string);
ми връща и долна четра, а като махна тирето нямам такива проблеми. Но това ще го преживея
Break The UnBreakable
non-word или non-word + подчертавка?!
Знакът за подчертавка е "word character" и се включва в \w.
Както пише и в документацията :
"A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place (see "Locale support" above). For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w."
Това с махането на тирето не мога да го пресъздам при мен. Т.е. махането или слагането на тирето не се отразява по никакъв начин на подчертавката.
Ако искаш да ти маха и подчертавката, тогава използвай това:
$string = preg_replace('#[^\w\-"]|_#', '', $string);
или това:
$string = preg_replace('#[^a-z0-9\-"]#i', '', $string);
което те кефи повече. Аз лично бих използвал втория вариант.
Everything louder than everything else...
Както пише и в документацията :
"A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place (see "Locale support" above). For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w."
Това с махането на тирето не мога да го пресъздам при мен. Т.е. махането или слагането на тирето не се отразява по никакъв начин на подчертавката.
Ако искаш да ти маха и подчертавката, тогава използвай това:
$string = preg_replace('#[^\w\-"]|_#', '', $string);
или това:
$string = preg_replace('#[^a-z0-9\-"]#i', '', $string);
което те кефи повече. Аз лично бих използвал втория вариант.
Everything louder than everything else...
Редактирано от Dakota на