- Удалить все после символа в PHP
- 8 ответов
- Удалить строку до/после указанного символа
- Удаление регулярными выражениями в PHP
- Текст и символы
- Удалить все пробелы
- Удалить двойные пробелы
- Удалить лишние пробелы перед знаками препинания
- Оставить в тексте только буквы, цифры и пробел
- Удалить цифры
- Удалить латинские буквы
- Удалить русские буквы
- Удалить все буквы и цифры
- Удалить все кроме цифр и пробелов
- Удалить табуляцию
- Удалить переносы строк
- Удалить определенное количество символов
- Удалить текст до определенного символа
- Удалить текст после символа
- Удалить скобки с их содержимым
- Комментарии
- Удалить комментарии из HTML
- Удаление многострочных комментариев «/* . */»
- Удалить комментарии «//» и «#»
- Комментарии SQL « —. »
- Нумерация строк
- Хештеги
- trim
- Return Values
- Examples
- Notes
- See Also
- User Contributed Notes 2 notes
Удалить все после символа в PHP
Может ли кто-нибудь сказать, как удалить символы после? в php. У меня есть один тест строки? = New Мне нужно удалить символы, а также = из этой строки.
8 ответов
Если вы хотите сохранить знак вопроса, решение будет почти таким же:
В этом решении используется простое регулярное выражение для удаления символа ? и всех последующих символов.
$string = "test?p=new"; $new_string = preg_replace("/\?.+/", "", $string);
$pos = strpos($str, '?'); // ? position $str = substr($str, 0, $pos);
Вы можете сделать это с хорошо написанным регулярным выражением, но гораздо более простой и быстрый способ сделать это — взорвать строку на «?» символ и использовать первый элемент в результирующем массиве.
$str = "test?=new"; $str2 = explode("?", $str); $use_this = $str2[0];
$use_this [0] будет «test». Если вы хотите добавить «?» назад, просто соедините:
$s = strpos($s, '?') !== FALSE ? strtok($s, '?') : $s;
Вы можете протестировать его в следующей командной строке:
php -r '$s = "123?456"; $s = strpos($s, "?") !== FALSE ? strtok($s, "?") : $s; echo $s;'
Вы всегда можете попробовать использовать preg_replace() :
$string = 'test?q=new'; $result = preg_replace("/\?.+/", "", $string);
Если по какой-то причине вы хотите сохранить ? в результате. вы также можете сделать это:
$string = 'test?q=new'; $result = preg_replace("/\?.+/", "?", $string);
(или вы могли бы использовать положительное утверждение look-behind, как предположил @BlueJ774):
Но в идеале, а для будущей ссылки, если вы работаете с строкой запроса, вы, вероятно, захотите использовать parse_str в какой-то момент, например:
$string = 'test?q=new'; parse_str($string, $output);
Потому что это даст вам массив ( $output , в данном случае), с которым нужно работать со всеми частями строки запроса, например:
Но обычно. вы, вероятно, просто захотите работать с строкой запроса к этому моменту. так что результат будет примерно таким:
Второе preg_replace (где хранится ? ) Также может быть представлено как $result = preg_replace(«/(?<=\?).+/", "", $string); Я думаю, что цель более ясна таким образом.
Хорошая точка зрения. В обычном сценарии это имело бы больше смысла; просто для примера я сохранил оба выражения для простоты. Но я бы вообразил ? обычно не будет сохранен .
Удалить строку до/после указанного символа
Удалить текст, который идёт до указанного символа можно через функцию strstr() .
$text = 'This is PHP script'; strstr($text, 'P'); // PHP script
Также есть функция stristr() , которая работает также, как и strstr() , только регистронезависимая.
$text = 'This is PHP script'; // Регистрозависимая strstr($text, 'P'); // PHP script strstr($text, 'p'); // pt // Регистронезависимая stristr($text, 'P'); // PHP script stristr($text, 'p'); // PHP script
Удалить текст, который идёт после указанного символа можно также через функцию strstr() , но добавив третий параметр true .
$text = 'This is PHP script'; strstr($text, 'P', true); // This is
Вариант через регулярное выражение (указан в качестве примера, рекомендуется использовать strstr() ):
$text = 'This is PHP script'; preg_replace('/(?>P).*/', '$1', $text); // This is
Авторизуйтесь, чтобы добавлять комментарии
Удаление регулярными выражениями в PHP
Примеры регулярных выражений для удаления данных из текста.
Текст и символы
Удалить все пробелы
$text = 'a b c d e'; $text = mb_ereg_replace('[\s]', '', $text); echo $text; // abcde
Удалить двойные пробелы
$text = 'a b c d e'; $text = mb_ereg_replace('[ ]+', ' ', $text); echo $text; // a b c d e
Удалить лишние пробелы перед знаками препинания
$text = 'Многие ! известные ? личности , и по сей день .'; echo preg_replace("/\s+([\.|,|!|\?]+)/", '\\1',$text);
Многие! известные? личности, и по сей день.
Оставить в тексте только буквы, цифры и пробел
$text = 'Многие известные. личности, по: сей день.'; echo mb_eregi_replace("[^a-zа-яё0-9 ]", '', $text);
Многие известные личности по сей день
Удалить цифры
$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789'; echo mb_eregi_replace('7', '', $text);
абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz
Удалить латинские буквы
$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789'; echo mb_eregi_replace('[a-z]', '', $text);
абвгдеёжзийклмнопрстуфхцчшщъыьэюя 0123456789
Удалить русские буквы
$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789'; echo mb_eregi_replace('[а-яё]', '', $text);
Удалить все буквы и цифры
$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789 . '; echo mb_eregi_replace('[\w]', '', $text);
Удалить все кроме цифр и пробелов
$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789 . '; echo mb_eregi_replace('[^0-9 ]', '', $text);
Удалить табуляцию
Удалить переносы строк
echo preg_replace("/[\r\n]/", '', $text);
Удалить определенное количество символов
Примеры удаляют девять символов в начале и конце текста.
// Удаление с начала $text = mb_eregi_replace("^.(.*)$", '\\1', $text); echo $text; // Удаление с конца $text = mb_eregi_replace("(.*)[^.]$", '\\1', $text); echo $text;
Удалить текст до определенного символа
Данные регулярные выражения удаляют все что находится до первого искомого символа, а также пробел который идет за ним.
$text = 'Многие известные. личности, по: сей - день.'; // Удалить до пробела echo preg_replace("/^(.*?)(\s)(.*?)$/", '\\3', $text); // Удалить до "." echo preg_replace("/^(.*?)(\.\s)(.*?)$/", '\\3', $text); // Удалить до "," echo preg_replace("/^(.*?)(,\s)(.*?)$/", '\\3', $text); // Удалить до ":" echo preg_replace("/^(.*?)(:\s)(.*?)$/", '\\3', $text); // Удалить до "-" echo preg_replace("/^(.*?)(-\s)(.*?)$/", '\\3', $text);
известные. личности, по: сей - день. личности, по: сей - день. по: сей - день. сей - день. день.
Удалить текст после символа
$text = 'Многие известные. личности, по: сей - день.'; // Удалить после пробела echo preg_replace("/^(.+?)\s.+$/", '\\1', $text); // Удалить после «.» echo preg_replace("/^(.+?)\..+$/", '\\1', $text); // Удалить после «,» echo preg_replace("/^(.+?),.+$/", '\\1', $text); // Удалить после «:» echo preg_replace("/^(.+?):.+$/", '\\1', $text); // Удалить после «-» echo preg_replace("/^(.+?)-.+$/", '\\1', $text);
Многие Многие известные Многие известные. личности Многие известные. личности, по Многие известные. личности, по: сей
Удалить скобки с их содержимым
$text = '(Casio G-SHOCK) [GW-9200-1ER] '; // Удаление (. ) echo preg_replace("/(.*?)\(.*?\)\s?(.*?)/is", '\\1\\3', $text); // Удаление [. ] echo preg_replace("/(.*?)\[.*?\]\s?(.*?)/is", '\\1\\3', $text); // Удаление echo preg_replace("/(.*?)\<.*?\>\s?(.*?)/is", '\\1\\3', $text); // Удаление [. ] echo preg_replace("/(.*?)<.*?>\s?(.*?)/is", '\\1\\3', $text);
Комментарии
Удалить комментарии из HTML
$text = 'Текст текст
'; echo preg_replace('/\s?\s?/', ' ', $text);
Удаление многострочных комментариев «/* . */»
$text = " /** * Описание функции и тд * @param name * @param defaultValue * @returns */ document.write(' '); "; echo preg_replace("/\/\*(.*?)\*\//sm", '', $text);
Удалить комментарии «//» и «#»
$text = " // По возрастанию: ksort($array); # По убыванию: krsort($array);"; $res = preg_replace("/\/\/.*\n/", '', $text); $res = preg_replace("/#.*\n/", '', $res); echo $res;
Комментарии SQL « —. »
$text = " SELECT * FROM `articles` WHERE `name` LIKE '%KEY%' -- OR `title` LIKE '%KEY%' OR `text` LIKE '%KEY%'"; echo preg_replace("/\s--.*\n/", '', $text);
SELECT * FROM `articles` WHERE `name` LIKE '%KEY%' OR `text` LIKE '%KEY%'
Нумерация строк
$text = ' 1 text text text. 2 text text text. 3 text text text. 1. text text text. 2. text text text. 3. text text text. 1) text text text. 2) text text text. 3) text text text.'; echo preg_replace('/(\d)+(\.|\)|\s)+([\s]?)+(.*)/', '\\4', $text);
text text text. text text text. text text text. text text text. text text text. text text text. text text text. text text text. text text text.
Хештеги
$text = 'broken beat, nu jazz, downtempo #nujazz, #downtempo, #intelligent'; echo preg_replace('/#([\S]+)/', '', $text);
broken beat, nu jazz, downtempo
trim
Optionally, the stripped characters can also be specified using the characters parameter. Simply list all characters that you want to be stripped. With .. you can specify a range of characters.
Return Values
Examples
Example #1 Usage example of trim()
$text = «\t\tThese are a few words 🙂 . » ;
$binary = «\x09Example string\x0A» ;
$hello = «Hello World» ;
var_dump ( $text , $binary , $hello );
$trimmed = trim ( $text );
var_dump ( $trimmed );
$trimmed = trim ( $text , » \t.» );
var_dump ( $trimmed );
$trimmed = trim ( $hello , «Hdle» );
var_dump ( $trimmed );
$trimmed = trim ( $hello , ‘HdWr’ );
var_dump ( $trimmed );
// trim the ASCII control characters at the beginning and end of $binary
// (from 0 to 31 inclusive)
$clean = trim ( $binary , «\x00..\x1F» );
var_dump ( $clean );
The above example will output:
string(32) " These are a few words :) . " string(16) " Example string " string(11) "Hello World" string(28) "These are a few words :) . " string(24) "These are a few words :)" string(5) "o Wor" string(9) "ello Worl" string(14) "Example string"
Example #2 Trimming array values with trim()
$fruit = array( ‘apple’ , ‘banana ‘ , ‘ cranberry ‘ );
var_dump ( $fruit );
array_walk ( $fruit , ‘trim_value’ );
var_dump ( $fruit );
The above example will output:
array(3) < [0]=>string(5) "apple" [1]=> string(7) "banana " [2]=> string(11) " cranberry " > array(3) < [0]=>string(5) "apple" [1]=> string(6) "banana" [2]=> string(9) "cranberry" >
Notes
Note: Possible gotcha: removing middle characters
Because trim() trims characters from the beginning and end of a string , it may be confusing when characters are (or are not) removed from the middle. trim(‘abc’, ‘bad’) removes both ‘a’ and ‘b’ because it trims ‘a’ thus moving ‘b’ to the beginning to also be trimmed. So, this is why it «works» whereas trim(‘abc’, ‘b’) seemingly does not.
See Also
- ltrim() — Strip whitespace (or other characters) from the beginning of a string
- rtrim() — Strip whitespace (or other characters) from the end of a string
- str_replace() — Replace all occurrences of the search string with the replacement string
User Contributed Notes 2 notes
note there is a behaviour change in php 8
You used to be able to say:
$p1 = trim($_POST[‘p1’]);
This will now throw deprecated warnings if parameter p1 is not set. It is better to say:
$p1 = trim($_POST[‘p1’]??»);
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : null;
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : »;
Note that trim() is not aware of Unicode points that represent whitespace (e.g., in the General Punctuation block), except, of course, for the ones mentioned in this page.
There is no Unicode-specific trim function in PHP at the time of writing (July 2023), but you can try some examples of trims using multibyte strings posted on the comments for the mbstring extension: https://www.php.net/manual/en/ref.mbstring.php