1

英数字以外の「繰り返し」文字をフィルタリングする最良の方法は何ですか

チェックする文字のリストを作成したくありません。PHPで使用できる、これに適した正規表現はありますか。

例:

...........

*****************

!!!!!!!! 

########### 

------------------

~~~~~~~~~~~~~

特殊なケースのパターン:

=*=*=*=*=*=

->->->->
4

7 に答える 7

1

パターンは次のようになります。s/([\W_]|=\*|->)\1+//g
または、単一のインスタンスで置き換える場合は、次のようになります。s/([\W_]|=\*|->)\1+/$1/g

編集...おそらく、特別なシーケンスを交互に最初に配置する必要があります。==特別なものを作成する必要がある場合は、[\W_]によって取得されません。

つまりs/(==>|=\*|->|[\W_])\1+/$1/g、特別な場合が最初であるようなものです。

于 2011-03-11T00:30:29.713 に答える
1

@sln 回答に基づく:

$str = preg_replace('~([^0-9a-zA-Z])\1+|(?:=[*])+|(?:->)+~', '', $str);
于 2011-03-11T00:45:33.080 に答える
0

これは私にとってはうまくいきます: preg_replace('/(.)\1{3,}/i', '', $sourceStr); 連続して 3 回以上繰り返されるすべてのシンボルを削除します。

于 2011-03-20T10:03:55.103 に答える
0
preg_replace('~\W+~', '', $str);
于 2011-03-10T23:54:47.567 に答える
0
replace(/([^A-Za-z0-9\s]+)\1+/, "")

非英数字非空白文字列の繰り返しパターンを削除します。

ただし、Unicode ベースのすべての非 ASCII ヨーロッパおよびその他の国際言語文字も削除することになるため、これは悪い習慣です。

国際化をまったく気にしない唯一の場所は、ソース コードの処理中ですが、文字列で引用されたテキストを処理していないため、誤ってブロックのコメントを外してしまう可能性もあります。

キャッチオールの代わりに置換する文字のリストを提供することで、削除しようとするものをより制限したい場合があります。

編集:以前のバージョンのShoutCASTラジオ名を処理しようとしたときに、以前に同様のことをしました. 当時、ステーションは次のような不快な名前を付けて、自分自身に注意を喚起しようとしました<<!!!!--- GREAT MUSIC STATION ---!!!!>>。私は同様のコーディングを使用して繰り返しシンボルを削除しましたが、最終的に削除するものに注意することを (難しい方法で) 学びました。

于 2011-03-11T03:59:58.770 に答える
0

sinの解決策はかなり良いですが、\W「非単語」クラスの使用には空白が含まれます。タブやスペースのシーケンスを削除したくないとは思わない! 負のクラス (' [^A-Za-z0-9\s]' のようなもの) を使用すると、うまく機能します。

于 2011-03-11T02:29:04.640 に答える
0

これにより、すべてのシンボルが除外されます

[コード] $q = ereg_replace("[^A-Za-z0-9 ]", "", $q); [/コード]

于 2011-03-11T02:36:53.853 に答える