Php 检测并删除附加到带有正则表达式的字符串的数字

Php 检测并删除附加到带有正则表达式的字符串的数字,php,regex,Php,Regex,我通过json接收单词的定义。有时我会收到这样的东西: 包括1 (数字也可以是2、3等)。如何自动检测(并删除)附加到单词中的数字字符 这是可以接受的: 住在一所房子里的人 这是不可接受的: 人1 假设一个单词是由字母组成的,这应该是可行的: preg_replace('/([a-zA-Z])[0-9]+/', '$1', $string) 假设一个单词是由字母组成的,这应该是可行的: preg_replace('/([a-zA-Z])[0-9]+/', '$1', $string) pre

我通过json接收单词的定义。有时我会收到这样的东西:

包括1

(数字也可以是2、3等)。如何自动检测(并删除)附加到单词中的数字字符

这是可以接受的:

住在一所房子里的人

这是不可接受的:

人1


假设一个单词是由字母组成的,这应该是可行的:

preg_replace('/([a-zA-Z])[0-9]+/', '$1', $string)

假设一个单词是由字母组成的,这应该是可行的:

preg_replace('/([a-zA-Z])[0-9]+/', '$1', $string)


preg_replace('/(?
preg_replace('/(?点是否始终存在?可能匹配
[A-Za-z]+[0-9]
并丢弃。点可以存在,但它是可选的。点是否始终存在?可能匹配
[A-Za-z]+[0-9]
和discard。点可以存在,但它是可选的。这不起作用:s警告:preg_replace()[function.preg replace]:未知修饰符“[”看着php文档,我想我需要用
/
包围表达式。试试看。你甚至不需要检查整个单词,只需要一个字母:
/(?:[a-zA-Z])[0-9]/
这不起作用:s警告:preg_replace()[function.preg replace]:未知修饰符“[”看着php文档,我想我需要用
/
包围表达式。试试看。你甚至不需要检查整个单词,只需要一个字母字符:
/(?:[a-zA-Z])[0-9]/
几乎可以很好地工作。它将删除找到它的单词的数字字符和最后一个字母字符。例如:inclusa1变为inclus。关于如何解决这个问题,您有什么想法吗?您可以使用lookback(如果php支持的话)。类似于
/(?@TikhonJelvis你说得对;我原以为非捕获组根本不包括在匹配集中,但我真正想要的是查找。我将更新我的答案以匹配你的评论。效果几乎不错。它删除了找到该组的单词的数字字符,但也删除了该组的最后一个字母字符。例如:inclusa1变为inclus.关于如何解决这个问题有什么想法吗?不用非捕获组,你可以使用lookback(如果php支持的话)。比如
/(?@TikhonJelvis)你是对的;我认为匹配集中根本不包括非捕获组,但我真正想要的是lookback。我会更新我的答案以匹配你的评论。