$string = "My text has so much whitespace
Plenty of spaces and tabs";
echo preg_replace("/\s\s+/", " ", $string);
PHPのドキュメントを読み、preg_replaceのチュートリアルに従いますが、このコードは
テキストに余白がたくさんあるたくさんのスペースとタブ
どうすればそれを変えることができますか:
テキストに余白がたくさんある
十分なスペースとタブ
まず、オペレーティングシステムに応じて、改行が\ r、\ n、または\ r\nのいずれかになりうることを指摘しておきます。
私の解決策:
echo preg_replace('/[ \t]+/', ' ', preg_replace('/[\r\n]+/', "\n", $string));
必要に応じて、2行に分けることができます。
$string = preg_replace('/[\r\n]+/', "\n", $string);
echo preg_replace('/[ \t]+/', ' ', $string);
更新:
さらに良い解決策はこれです:
echo preg_replace('/[ \t]+/', ' ', preg_replace('/\s*$^\s*/m', "\n", $string));
または:
$string = preg_replace('/\s*$^\s*/m', "\n", $string);
echo preg_replace('/[ \t]+/', ' ', $string);
複数の行を単一行に分割する正規表現を変更しました。 「m」修飾子(^と$を改行の開始と終了に一致させる)を使用し、文字列の末尾と先頭にある\ s(スペース、タブ、改行、改行)文字を削除します。次の。これにより、スペースのみの空行の問題が解決されます。前の例では、行がスペースで埋められていた場合、余分な行をスキップしていました。
正しい答えを編集しました。 PHP 5.2.4かそこらから、次のコードは:
echo preg_replace('/\v(?:[\v\h]+)/', '', $string);
$text = preg_replace("/[\r\n]+/", "\n", $text);
$text = preg_replace("/\s+/", ' ', $text);
テスト済み:)
//Newline and tab space to single space
$from_mysql = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $from_mysql);
// Multiple spaces to single space ( using regular expression)
$from_mysql = ereg_replace(" {2,}", ' ',$from_mysql);
// Replaces 2 or more spaces with a single space, {2,} indicates that you are looking for 2 or more than 2 spaces in a string.
これは、COMPLETELY MINIFY文字列全体(大きなブログ記事など)でありながら、すべてのHTMLタグを所定の位置に保持します。
$email_body = str_replace(PHP_EOL, ' ', $email_body);
//PHP_EOL = PHP_End_Of_Line - would remove new lines too
$email_body = preg_replace('/[\r\n]+/', "\n", $email_body);
$email_body = preg_replace('/[ \t]+/', ' ', $email_body);
代替アプローチ:
echo preg_replace_callback("/\s+/", function ($match) {
$result = array();
$prev = null;
foreach (str_split($match[0], 1) as $char) {
if ($prev === null || $char != $prev) {
$result[] = $char;
}
$prev = $char;
}
return implode('', $result);
}, $string);
出力:
My text has so much whitespace
Plenty of spaces and tabs
編集:異なるアプローチであるため、これを読み直しました。それはおそらく要求されたものではありませんが、少なくとも異なる空白のグループをマージすることはありません(たとえば、space, tab, tab, space, nl, nl, space, space
はspace, tab, space, nl, space
になります)。
試してください:
$string = "My text has so much whitespace
Plenty of spaces and tabs";
//Remove duplicate newlines
$string = preg_replace("/[\n]*/", "\n", $string);
//Preserves newlines while replacing the other whitspaces with single space
echo preg_replace("/[ \t]*/", " ", $string);
なぜあなたはこのようにしているのですか?
htmlでは、複数のスペースを使用しても1つのスペースしか表示されません...
例:
<i>test content 1 2 3 4 5</i>
出力は次のようになります:
テスト内容1 2 3 4 5
htmlに複数のスペースが必要な場合は、
これが役に立つかどうかも定かではありません。
複数のスペースおよびその他の必要または不要なものをクリアし、1行の文字列または複数行の文字列(渡された引数/オプションに応じて)を生成する関数。他の言語の文字を削除または保持し、改行タブをスペースに変換することもできます。
/** ¯\_(ツ)_/¯ Hope it's useful to someone. **/
// If $multiLine is null this removes spaces too. <options>'[:emoji:]' with $l = true allows only known emoji.
// <options>'[:print:]' with $l = true allows all utf8 printable chars (including emoji).
// **** TODO: If a unicode emoji or language char is used in $options while $l = false; we get an odd � symbol replacement for any non-matching char. $options char seems to get through, regardless of $l = false ? (bug (?)interesting)
function alphaNumericMagic($value, $options = '', $l = false, $multiLine = false, $tabSpaces = " ") {
$utf8Emojis = '';
$patterns = [];
$replacements = [];
if ($l && preg_match("~(\[\:emoji\:\])~", $options)) {
$utf8Emojis = [
'\x{1F600}-\x{1F64F}', /* Emoticons */
'\x{1F9D0}-\x{1F9E6}',
'\x{1F300}-\x{1F5FF}', /* Misc Characters */ // \x{1F9D0}-\x{1F9E6}
'\x{1F680}-\x{1F6FF}', /* Transport and Map */
'\x{1F1E0}-\x{1F1FF}' /* Flags (iOS) */
];
$utf8Emojis = implode('', $utf8Emojis);
}
$options = str_replace("[:emoji:]", $utf8Emojis, $options);
if (!preg_match("~(\[\:graph\:\]|\[\:print\:\]|\[\:punct\:\]|\\\-)~", $options)) {
$value = str_replace("-", ' ', $value);
}
if ($l) {
$l = 'u';
$options = $options . '\p{L}\p{N}\p{Pd}';
} else { $l = ''; }
if (preg_match("~(\[\:print\:\])~", $options)) {
$patterns[] = "/[ ]+/m";
$replacements[] = " ";
}
if ($multiLine) {
$patterns[] = "/(?<!^)(?:[^\r\na-z0-9][\t]+)/m";
$patterns[] = "/[ ]+(?![a-z0-9$options])|[^a-z0-9$options\s]/im$l";
$patterns[] = "/\t/m";
$patterns[] = "/(?<!^)$tabSpaces/m";
$replacements[] = " ";
$replacements[] = "";
$replacements[] = $tabSpaces;
$replacements[] = " ";
} else if ($multiLine === null) {
$patterns[] = "/[\r\n\t]+/m";
$patterns[] = "/[^a-z0-9$options]/im$l";
$replacements = "";
} else {
$patterns[] = "/[\r\n\t]+/m";
$patterns[] = "/[ ]+(?![a-z0-9$options\t])|[^a-z0-9$options ]/im$l";
$replacements[] = " ";
$replacements[] = "";
}
echo "\n";
print_r($patterns);
echo "\n";
echo $l;
echo "\n";
return preg_replace($patterns, $replacements, $value);
}
使用例:
echo header('Content-Type: text/html; charset=utf-8', true);
$string = "fjl!sj\nfl _ sfjs-lkjf\r\n\tskj 婦女與環境健康 fsl \tklkj\thl jhj ⚧???? lkj ⸀ skjfl gwo lsjowgtfls s";
echo "<textarea style='width:100%; height:100%;'>";
echo alphaNumericMagic($string, '⚧', true, null);
echo "\n\nAND\n\n";
echo alphaNumericMagic($string, '[:print:]', true, true);
echo "</textarea>";
結果::
fjlsjflsfjslkjfskj婦女與環境健康fslklkjhljhj⚧lkjskjflgwolsjowgtflss
AND
fjl!sj
fl _ sfjs-lkjf
skj 婦女與環境健康 fsl klkj hl jhj ⚧???? lkj ⸀ skjfl gwo lsjowgtfls s