英数字以外の「繰り返し」文字をフィルタリングする最良の方法は何ですか
チェックする文字のリストを作成したくありません。PHPで使用できる、これに適した正規表現はありますか。
例:
...........
*****************
!!!!!!!!
###########
------------------
~~~~~~~~~~~~~
特殊なケースのパターン:
=*=*=*=*=*=
->->->->
英数字以外の「繰り返し」文字をフィルタリングする最良の方法は何ですか
チェックする文字のリストを作成したくありません。PHPで使用できる、これに適した正規表現はありますか。
例:
...........
*****************
!!!!!!!!
###########
------------------
~~~~~~~~~~~~~
特殊なケースのパターン:
=*=*=*=*=*=
->->->->
パターンは次のようになります。s/([\W_]|=\*|->)\1+//g
または、単一のインスタンスで置き換える場合は、次のようになります。s/([\W_]|=\*|->)\1+/$1/g
編集...おそらく、特別なシーケンスを交互に最初に配置する必要があります。==
特別なものを作成する必要がある場合は、[\W_]によって取得されません。
つまりs/(==>|=\*|->|[\W_])\1+/$1/g
、特別な場合が最初であるようなものです。
@sln 回答に基づく:
$str = preg_replace('~([^0-9a-zA-Z])\1+|(?:=[*])+|(?:->)+~', '', $str);
これは私にとってはうまくいきます: preg_replace('/(.)\1{3,}/i', '', $sourceStr); 連続して 3 回以上繰り返されるすべてのシンボルを削除します。
preg_replace('~\W+~', '', $str);
replace(/([^A-Za-z0-9\s]+)\1+/, "")
非英数字非空白文字列の繰り返しパターンを削除します。
ただし、Unicode ベースのすべての非 ASCII ヨーロッパおよびその他の国際言語文字も削除することになるため、これは悪い習慣です。
国際化をまったく気にしない唯一の場所は、ソース コードの処理中ですが、文字列で引用されたテキストを処理していないため、誤ってブロックのコメントを外してしまう可能性もあります。
キャッチオールの代わりに置換する文字のリストを提供することで、削除しようとするものをより制限したい場合があります。
編集:以前のバージョンのShoutCASTラジオ名を処理しようとしたときに、以前に同様のことをしました. 当時、ステーションは次のような不快な名前を付けて、自分自身に注意を喚起しようとしました<<!!!!--- GREAT MUSIC STATION ---!!!!>>
。私は同様のコーディングを使用して繰り返しシンボルを削除しましたが、最終的に削除するものに注意することを (難しい方法で) 学びました。
sinの解決策はかなり良いですが、\W
「非単語」クラスの使用には空白が含まれます。タブやスペースのシーケンスを削除したくないとは思わない! 負のクラス (' [^A-Za-z0-9\s]
' のようなもの) を使用すると、うまく機能します。
これにより、すべてのシンボルが除外されます
[コード] $q = ereg_replace("[^A-Za-z0-9 ]", "", $q); [/コード]