Я изо всех сил старался удалить все слова в предложение с числами в них, но все же безуспешно! И я даже попробовал следующее регулярное выражение:
$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; ?>
<?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.
Одна оговорка: поскольку это регулярное выражение разбивает ведущее пространство, а не конечное, если слово FIRST содержит adigit, тогда результат будет иметь место. Таким образом:
<?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
Любые специальные символы, которые вы хотите включить как часть слов, которые вам нужно добавить в классы символов.