正则表达式删除包含句子中数字的所有单词

时间:2012-06-13 22:23:04

标签: php regex

我尽力删除句子中包含数字的所有单词,但仍然不成功!我甚至尝试了以下正则表达式:

$regex = '/(\\s+\\w{1,2}(?=\\W+))|(\\s+[a-zA-Z0-9_-]+\\d+)/';
$x=preg_replace($regex,"",$x);

我正在努力完成以下任务:

带有包含数字和任何特殊字符的单词的原始文本,例如 - 和_:

This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3.

最终文本需要如下:

This is very good.

3 个答案:

答案 0 :(得分:2)

<?php

$x="This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3.";
$re="/ ?\b[^ ]*[0-9][^ ]*\b/i";
print preg_replace($re, "", $x) . "\n";

返回:

This is very good.

一个附带条件:由于此正则表达式删除前导空格而不是尾随空格,如果第一个单词包含adigit,则结果将有一个前置空格。因此:

<?php

$x="9abc foo bar.";
$re="/ ?\b[^ ]*[0-9][^ ]*\b/i";
print preg_replace($re, "", $x) . "\n";

返回:

 foo bar
^

答案 1 :(得分:2)

这是一个(希望)无怪的方式(ideone):

$str = '-12x This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3. foo bar';
echo preg_replace('/\s+[\w-]*\d[\w-]*|[\w-]*\d[\w-]*\s*/', '', $str);

输出:

This is very good. foo bar

您希望将所有特殊字符作为单词的一部分包含在字符类中。

答案 2 :(得分:1)

好吧,我用Javascript写道:

var str = 'This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3.';
var result = str.match(/(^[\D]+\s|\s[\D]+\s|\s[\D]+$|^[\D]+$)+/g).join('');

但你可以在PHP中试试这个:

<?
$str = 'This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3.';;
preg_match_all("/(^[\D]+\s|\s[\D]+\s|\s[\D]+$|^[\D]+$)+/",$str,$result);
$result = implode('',$result[0]);
echo $result;
?>