簡體   English   中英

正則表達式模式匹配文字重復 \n

[英]Regex pattern matching literal repeated \n

給定一個文字字符串,例如:

Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld

我想將重復的\n減少到單個\n

我正在使用 PHP,並且一直在玩一堆不同的正則表達式模式。 所以這里有一個簡單的代碼示例:

$testRegex = '/(\\n){2,}/';
$test = 'Hello\n\n\n\n\n\n\n\n\nWorld';
$test2 = preg_replace($testRegex ,'\n',$test); 
echo "<hr/>test regex<hr/>".$test2;

我是 PHP 的新手,對正則表達式並不陌生,但似乎 '\n' 符合特殊規則。 我仍在努力解決這些問題。

編輯:我已經將我在 php 文件中的文字代碼放在這里,如果我這樣做str_replace()我可以得到好事情發生,但這顯然不是一個完整的解決方案。

要將文字\n與正則表達式匹配,您的字符串文字需要四個反斜杠來生成一個帶有兩個反斜杠的字符串,正則表達式引擎將其解釋為一個反斜杠的轉義。

$testRegex = '/(\\\\n){2,}/';
$test = 'Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld';
$test2 = preg_replace($testRegex, '\n', $test);

也許您需要在正則表達式中加倍轉義?

$pattern = "/\\n+/"

$awesome_string = preg_replace($pattern, "\n", $string);

編輯:只需閱讀您對已接受答案的評論即可。 不適用,但仍然有用。

如果您打算擴展此邏輯以包含其他 forms 空白:

$output = echo preg_replace('%(\s)*%', '$1', $input);

將所有重復的空白字符減少為匹配的空白字符的單個實例。

它確實符合特殊規則,並且您需要添加“多行”-修飾符,m。 所以你的模式看起來像

$pattern = '/(\n)+/m'

這應該為您提供匹配項。 有關所有修飾符及其詳細含義,請參見文檔

由於您試圖將所有換行符減少到一個,因此上述模式應該適用於您的代碼的 rest。 祝你好運!

試試這個正則表達式:

/[\n]*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM