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

Php 正则表达式删除句子中包含数字的所有单词,php,regex,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 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.

我用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;
?>

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

<?php

$x="9abc foo bar.";
$re="/ ?\b[^ ]*[0-9][^ ]*\b/i";
print preg_replace($re, "", $x) . "\n";
这里有一个(希望是)奇怪的自由方式():

输出:

This is very good. foo bar

您需要添加到字符类中的任何特殊字符,作为单词的一部分。

这是什么regex方言?也就是说,您使用的是什么语言?$regex='/(\\s+\\w{1,2}(?=\\w+)|(\\s+[a-zA-Z0-9.-]+\\d+)/$x=preg_replace($regex,“,$x);几乎所有这些都应该编辑成问题(PHP应该是一个标签)。我是为你做的。谢谢Oded,以后会处理的。谢谢Mark!那也会有很大的帮助!但我需要基于php的解决方案!我对PHP不是很在行,但我用一段代码更新了答案。试着告诉我是否有效是的,对马克,我正要发布:)谢谢,是的,现在可以了!谢谢你,伙计@Vishal和@Mark,这将不适用于字符串,例如
“有效的连续单词,它们之间只有一个空格”
。为什么不呢?我试过了,而且做得很好。。。我错过什么了吗?谢谢@ghoti!也检查一下:)前面的空格问题可以通过匹配下面的空格来避免,就像我的回答一样。但这会降低空格的质量。我想我们需要知道空白是否重要,或者OP中的“单词”是否只是文本,或者是文本+空白,或者空白+文本。不,它不会降低任何性能,只会升级。;-)这不会保留空白。用字符串
“-12x这是\uuuuuuuuuuuuuuus3f8g\uu343c3”试试看。
。(下划线表示空格,因为注释会折叠空格。)@ghoti,确实如此,例如:每个单词都会被删除,并在其周围加上一个空格。当有两个选项时,将在哪一侧删除空间没有指定,因此在这里它将删除其前面的空间。
<?php

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