如何从字符串中删除 PHP 中包含非字母字符的单词?
How to remove words in PHP that contain Non-Alphabet characters from a string?
如何从包含非字母表字符的字符串中删除整个单词?
编辑 但是,'
和 -
应该是唯一允许与字母表一起使用的字符。
例如:This is a? #test e3ample
变为:This is
我找到的解决方案侧重于从字符串中删除特定字符而不是整个单词。
我曾尝试创建一个包含禁用字符的数组,但这是不好的做法。我将如何使用正则表达式来做到这一点?或者类似的东西。
我们可以尝试使用以下模式进行正则表达式替换:
(?=[^ ]*[^A-Za-z \'-])([^ ]*)(?:\s+|$)
这使用先行检查每个单词是否包含非字母字符。如果是这样,那么它将删除整个单词。也允许使用破折号和单引号。
$input = "H3llo This is a? #test e3ample of a sentence-word bl&h.";
echo preg_replace('/(?=[^ ]*[^A-Za-z \'-])([^ ]*)(?:\s+|$)/', '', $input);
This is of a sentence-word
编辑:
如果将来某个时候您需要将允许的字符添加到您的列表中(破折号和单撇号除外),那么只需将它们添加到字符 class 中即可。例如。还允许句点和逗号然后使用此模式:
(?=[^ ]*[^A-Za-z \'.,-])([^ ]*)(?:\s+|$)
简单地为不符合"word"定义的连续字符写一个匹配,例如:
- 任何非空格字符
\S*
- 允许字符的否定列表
[^-a-z\s]
加上space
- 非空格字符
\S*
诀窍在于任何非space 字符串都会被匹配,只要它包含一个不在允许集合中的字符。
根据我的测试,这个模式是最精简的,因为它避免了环视和捕获组。如果它不适用于所有情况,请给我评论打破它的字符串。
演示:https://regex101.com/r/h9w3xn/5
模式:
/\S*[^a-z '-]\S* | \S*[^a-z '-]\S*/i
(无替换字符串)
这将匹配无效的子字符串和前导或尾随 space(但绝不会同时匹配)以生成干净的输出字符串。
有人可能会评论说这不是一个非常 DRY 的模式,因为它会自我重复,但优点是:效率和我认为的可读性。
来自我的回答 phone;如果我错了,请纠正我。
如何从包含非字母表字符的字符串中删除整个单词?
编辑 但是,'
和 -
应该是唯一允许与字母表一起使用的字符。
例如:This is a? #test e3ample
变为:This is
我找到的解决方案侧重于从字符串中删除特定字符而不是整个单词。
我曾尝试创建一个包含禁用字符的数组,但这是不好的做法。我将如何使用正则表达式来做到这一点?或者类似的东西。
我们可以尝试使用以下模式进行正则表达式替换:
(?=[^ ]*[^A-Za-z \'-])([^ ]*)(?:\s+|$)
这使用先行检查每个单词是否包含非字母字符。如果是这样,那么它将删除整个单词。也允许使用破折号和单引号。
$input = "H3llo This is a? #test e3ample of a sentence-word bl&h.";
echo preg_replace('/(?=[^ ]*[^A-Za-z \'-])([^ ]*)(?:\s+|$)/', '', $input);
This is of a sentence-word
编辑:
如果将来某个时候您需要将允许的字符添加到您的列表中(破折号和单撇号除外),那么只需将它们添加到字符 class 中即可。例如。还允许句点和逗号然后使用此模式:
(?=[^ ]*[^A-Za-z \'.,-])([^ ]*)(?:\s+|$)
简单地为不符合"word"定义的连续字符写一个匹配,例如:
- 任何非空格字符
\S*
- 允许字符的否定列表
[^-a-z\s]
加上space - 非空格字符
\S*
诀窍在于任何非space 字符串都会被匹配,只要它包含一个不在允许集合中的字符。
根据我的测试,这个模式是最精简的,因为它避免了环视和捕获组。如果它不适用于所有情况,请给我评论打破它的字符串。
演示:https://regex101.com/r/h9w3xn/5
模式:
/\S*[^a-z '-]\S* | \S*[^a-z '-]\S*/i
(无替换字符串)
这将匹配无效的子字符串和前导或尾随 space(但绝不会同时匹配)以生成干净的输出字符串。
有人可能会评论说这不是一个非常 DRY 的模式,因为它会自我重复,但优点是:效率和我认为的可读性。
来自我的回答 phone;如果我错了,请纠正我。