简单的preg_replace regex,我可以';我想不通


Simple preg_replace regex that I can't figure out

我需要一个简单的正则表达式,它将在preg_replace中工作,并将给定的任何输入转换为以下规则:

1) 第一个字符必须是A-Z或A-Z

2) 如果超过1个字符,则以下字符必须是A-Z、A-Z、0-9或空格

我需要删除任何不一致的字符,并返回结果字符串。

我将其作为正则表达式字符串:

/^[a-zA-Z][a-zA-Z0-9 ]*$/

我有一点正则表达式的经验,所以我认为这应该有效,但当我尝试像这样的字符串时

1Athsj294-djs

此处:http://www.functions-online.com/preg_replace.html

它不起作用,请帮忙。谢谢

$result = preg_replace('/^[^a-z]*([a-z][a-z0-9 ]*).*$/si', ''1', $subject);

更改

1Athsj294-djs

进入

Athsj294

解释:

^            # Start of string
[^a-z]*      # Match (optionally) any characters except ASCII letters
(            # Match and capture...
 [a-z]       #  one ASCII letter
 [a-z0-9 ]*  #  zero or more ASCII letters/digits or spaces
)            # End of capturing group
.*           # Match the rest of the string
$            # Match the end of the string

/si修饰符使正则表达式不区分大小写,并允许点与换行符匹配。

例如,您可以捕获preg_match('/^[a-zA-Z][a-zA-Z0-9 ]*/', $string, $matches),$matches[0]将包含您的匹配项。如果你想实际预存,那就需要前瞻性。

我认为您的正则表达式看起来不错,只是您必须删除^$

所以应该是

preg_match('/[a-zA-Z][a-zA-Z0-9 ]*/', $subject)           // this is for preg_match though
preg_replace('/[^a-zA-Z]*([a-zA-Z][a-zA-Z0-9]*)[^a-zA-Z0-9]*/', '$1', '1Athsj294-djs') // for preg_replace