Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式删除除字符代码以外的所有数字_Php_Regex - Fatal编程技术网

PHP正则表达式删除除字符代码以外的所有数字

PHP正则表达式删除除字符代码以外的所有数字,php,regex,Php,Regex,根据线程,在PHP中删除字符串中的所有数字非常容易 例如: $no_digits = preg_replace('/\d/', '', 'This string contains digits! 1234'); 但是,我不希望删除HTML字符代码中的数字,例如: ) © 如何让正则表达式忽略HTML字符代码中的数字?i、 e.夹在和之间的数字字符?您可以使用(*SKIP)(*F)动词: echo preg_replace('/&#\d+;(*SKIP

根据线程,在PHP中删除字符串中的所有数字非常容易

例如:

$no_digits = preg_replace('/\d/', '', 'This string contains digits! 1234');
但是,我不希望删除HTML字符代码中的数字,例如:

)
©
如何让正则表达式忽略HTML字符代码中的数字?i、 e.夹在
之间的数字字符?

您可以使用
(*SKIP)(*F)
动词:

echo preg_replace('/&#\d+;(*SKIP)(*F)|\d+/', '', 
                  'This string contains digits! 1234 ) © 5678');
//=> This string contains digits!  ) ©
&#\d+;(*SKIP)(*F)
将跳过匹配id regex matches
和#\d+模式

或者,您可以使用lookarounds:

echo preg_replace('/(?<!&#)\d+|\d+(?!;)/', '',
                  'This string contains digits! 1234 &#41; &#169; 5678');
echo preg\u replace('/(?您可以使用
(*SKIP)(*F)
动词:

echo preg_replace('/&#\d+;(*SKIP)(*F)|\d+/', '', 
                  'This string contains digits! 1234 &#41; &#169; 5678');
//=> This string contains digits!  &#41; &#169;
和#\d+;(*跳过)(*F)
将跳过匹配id正则表达式匹配的
和#\d+;
模式

或者,您可以使用lookarounds:

echo preg_replace('/(?<!&#)\d+|\d+(?!;)/', '',
                  'This string contains digits! 1234 &#41; &#169; 5678');
echo preg\u replace('/(?您可以使用

var output = Regex.Replace(input, @"[\d-]", string.Empty);
***
\d
标识符仅与任何数字字符匹配。

您可以使用

var output = Regex.Replace(input, @"[\d-]", string.Empty);

***
\d
标识符仅与任何数字字符匹配。

您可以使用“向后看”和“向前看”

$no_digits = preg_replace('/(?<!&#)\d+(?=[^;\d])/', '', 'This string contains &#41; digits! 1234');

$no_digits=preg_replace(')/(?您可以使用“向后看”和“向前看”

$no_digits = preg_replace('/(?<!&#)\d+(?=[^;\d])/', '', 'This string contains &#41; digits! 1234');


$no_digits=preg_replace('/(?作为一个选项,您可以将代码转换为UTF-8编码(如果尚未转换为UTF-8),然后使用
HTML_entity_decode()将HTML实体转换为相应的字符
,然后使用regexp删除数字,然后,如果需要,使用
htmlspecialchars()
,再次将特殊字符转换为相应的实体(在UTF-8中,通过
htmlspecialchars()
,实际上只需转义一小部分特殊字符即可),然后将代码转换回原始编码(如果原始字符串不是UTF-8格式)。

作为一个选项,您可以将代码转换为UTF-8编码(如果尚未转换为UTF-8),然后使用
HTML\u entity\u decode()将HTML实体转换为相应的字符
,然后使用regexp删除数字,然后,如果需要,使用
htmlspecialchars()
,再次将特殊字符转换为相应的实体(在UTF-8中,通过
htmlspecialchars()
,实际上只需转义一小部分特殊字符即可),然后将代码转换回原始编码(如果原始字符串不在UTF-8中)。

php是否将
*F
视为*FAIL?是的
*F
只是
*FAIL
@sln的快捷方式确实,
(*F)
=
(?!)
=
(*FAIL)
(*S)
(*SKIP)呢
?不,这在PCREDoes php中无效请将
*F
视为*FAIL?是的
*F
只是
*FAIL
@sln的一个快捷方式的确,
(*F)
=
(?!)
=
(*FAIL)
。那么
(*S)
=
(*SKIP)呢
?不,这在pcrex中无效。您可能还需要包括十六进制版本。并且您可能只需要使用整个实体构造,而不需要具体说明。
“(?i:[&%](?:[a-z]+|(?:\#(?:[0-9]+|x[0-9a-f]+);(*跳过)(*失败)\d+)~'
您可能还需要包含十六进制版本。而且您可能只需要使用整个实体构造而不需要具体说明。
'~(?i:[&%](?:[a-z]+|(?:\\#(?:[0-9]+|x[0-9a-f]+);(*跳过)(*失败)\\d+)~'
也就是javascript,OP是PHP格式的。同样
\d
只匹配
0-9
,一位数,需要一个用于十/百/千/等的量词。也就是javascript,OP是PHP格式的。同样
\d
只匹配
0-9
,一位数,需要一个用于十/百/千/等的量词。这
(?!&#\d+
段向前查找不
&
,然后匹配
\d
,这是一个“向后查找”。正则表达式引擎首先查找
\d
。一旦找到,它向后查找,看看它是否不
&
,然后它将触发
\d
找到。这是一个相对的东西。:-pNo这是向前看的。哈哈啊哈,我明白你们的意思了。我错过了一个
。干杯。好的,所以
(?遇到与@anubhava的交替正则表达式相同的问题。您已拆分了无法单独工作的条件。如果其中任何一个单独满足,但不能同时满足,则将丢失有效的
\d
…例如:它将不匹配
555
;也不匹配
77
x此
(?!&)\d+
段向前查找不
&
,然后匹配
\d
,这是一个“向后查找”。正则表达式引擎首先查找
\d
。一旦找到,它向后查找,看看它是否不
&
,然后它将触发
\d
找到。这是一个相对的东西。:-pNo这是向前看的。哈哈啊哈,我明白你们的意思了。我错过了一个
。干杯。好的,所以
(?遇到与@anubhava的交替正则表达式相同的问题。您分割了无法单独工作的条件。如果其中任何一个单独满足,但不能同时满足,则将丢失有效的
\d
…例如:它将不匹配
555
;也不匹配&#
77
x