簡體   English   中英

PHP正則表達式解決方案-刪除一些特殊字符並用文本替換一些

[英]PHP regex solution - Remove some special characters and replace some with text

我有一個PHP變量,比如

$myvariable = "te    xt!@ na#@)(me+=&t^*ext?>;.'na^%me";

我想用單個下划線_替換特殊字符和特殊字符組(包括空格)。 該字符串可以包含& ,並且可以用and代替。

前一個變量的結果應為;

te_xt_na_me_andt_ext_na_me

如何在PHP中做到這一點?

假設 “字符”之外的任何東西都視為一次性的。

$patterns = array(
    '/&/'             => 'and',  // Ampersand to "and"
    '/[^[:alpha:]]+/' => '_'     // Anything *but* a character to underscore
);

$result = preg_replace(array_keys($patterns), array_values($patterns), $input);

最后一個模式根據當前語言環境1 (因此包括空白)替換一個或多個出現的“非單詞”字符的組。


1旁注(可能不相關):如果運行腳本的服務器的語言環境為en_US ,則會發生以下替換:

$input = 'app!le___s &!   orän=%ges';
$result = 'app_le_s_and_or_n_ges';

如果語言環境是de_DE ,則結果如下:

$result = 'app_le_s_and_orän_ges';

因為ä是此特定語言環境中[[:alpha:]]一部分。 避免此問題的明顯解決方案是用字符類替換[a-zA-Z]

這應該做到這一點:

$myvariable = str_replace('&','and',$myvariable)
$myvariable = preg_replace ('/[^a-z]+/i', '_' , $myvariable)

請參閱: http//php.net/manual/de/function.preg-replace.php

方括號內的脫字號(^)表示查找所有未在方括號中聲明的內容。 因此,每個特殊字符都不是“ az”。 加號表示應該多次匹配。 分隔斜杠后面的“ i”表示不區分大小寫。

暫無
暫無

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

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