简单的preg_replace正则表达式,我无法弄清楚

时间:2012-03-12 07:48:06

标签: php regex preg-replace

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

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

2)如果有超过1个字符,则后面的字符必须是A-Z,a-z,0-9或空格

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

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

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

我有一点regex经验,所以我认为这应该有效,但是当我尝试一下这样的字符串时:

1Athsj294-djs

下面: http://www.functions-online.com/preg_replace.html

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

3 个答案:

答案 0 :(得分:2)

$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修饰符使正则表达式不区分大小写,并允许点匹配换行符。

答案 1 :(得分: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

答案 2 :(得分:0)

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