1

a-zA-Z0-9に接続されていない文字のセットはすべて削除する必要があります。例:

  • これは素晴らしい!(ここでは何もしません)
  • はい、これも大丈夫です!?(ここでは何もしません)
  • これは !!!良くない。!!!!!!! ->これは素晴らしいことではありません。(チャンクが検出されました)
  • 無駄な期間が多すぎる……そうですか?->無駄な期間が多すぎますか?(チャンクが検出されました)
  • .... {{.....チャンクが先頭にあります->チャンクが先頭にあります(チャンクが検出されました)
  • チャンクは最後にあります[[]] ->チャンクは最後にあります(チャンクが検出されました)
  • こんにちは[[[[[[]]]]]]友達.....?お元気ですか[}}}}}} ->こんにちは友達.....?お元気ですか (チャンクが検出されました)

チャンクは、次のようなスタンドアロンの文字または文字列と見なされます。

  • a-zA-Z0-9とは異なります
  • 任意の位置(開始、中間、終了)
  • 英数字とは一切関係ありません
4

4 に答える 4

1

有効な文字に触れていない1つ以上の英数字以外の文字に一致する正規表現。

/(^| )[^a-zA-Z0-9]+( |$)/

PHPの使用法:

preg_replace('/(^| )[^a-zA-Z0-9]+( |$)/', '$1$2', $item);

注:入力に対して実行すると、余分なスペースがいくつかあります。技術的には、これらのスペースは有効な文字に触れています。

于 2012-11-16T23:38:22.480 に答える
1

ルックアラウンドを使用できます。できるだけ多くの非単語、非スペース文字を一致させてから、チャンクの横に非スペース文字がないことを表明できます。

$output = preg_replace('/(?<!\S)[^a-z\d\s]+(?!\S)/i', '', $input);

これにより、複数の空白文字(チャンクの左側と右側にある文字)が残る可能性があることに注意してください。それが望ましくない場合は、2番目の置換手順を実行するのがおそらく最も簡単です。

$output = preg_replace('/\s+/', ' ', trim($output));
于 2012-11-17T00:04:17.567 に答える
1

ここで、これを試してください:

'/(?:(?<=\s)|^)[^a-z0-9]+(?:(?=\s)|$)/i'

http://codepad.org/2JZLHdhL

基本的な考え方は次のとおりです。後読みを使用して、後ろに空白があるか、文字列の先頭にあることを表明します。次に、英数字以外の文字をキャプチャし、先読みを使用して、空白または文字列の終わりが続くようにします。

于 2012-11-17T01:30:36.920 に答える
0

これはあなたが必要とするものです

[^a-zA-Z0-9\d\s:]+[^a-zA-Z0-9\d\s:]

これにより、英数字に接続されていない英数字以外の文字のみが取得されます。

于 2012-11-17T00:04:00.033 に答える