3

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

$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.
4

3 回答 3

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.

一个附带条件:由于此正则表达式去除前导空格而不是尾随空格,因此如果第一个单词包含数字,则结果将在前面加上空格。因此:

<?php

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

返回:

 foo bar
^
于 2012-06-13T22:47:08.667 回答
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

您想要包含在单词中的任何特殊字符都需要添加到字符类中。

于 2012-06-13T23:44:07.390 回答
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;
?>
于 2012-06-13T22:28:35.917 回答