Php 简单的preg_替换我可以';不明白
我需要一个简单的正则表达式,它将在preg_replace中工作,将给定的任何输入转换为以下规则: 1) 第一个字符必须是A-Z或A-Z 2) 如果有多个字符,则以下字符必须是A-Z、A-Z、0-9或空格 我需要删除任何不一致的字符,并返回结果字符串 我将其作为正则表达式字符串:Php 简单的preg_替换我可以';不明白,php,regex,preg-replace,Php,Regex,Preg Replace,我需要一个简单的正则表达式,它将在preg_replace中工作,将给定的任何输入转换为以下规则: 1) 第一个字符必须是A-Z或A-Z 2) 如果有多个字符,则以下字符必须是A-Z、A-Z、0-9或空格 我需要删除任何不一致的字符,并返回结果字符串 我将其作为正则表达式字符串: /^[a-zA-Z][a-zA-Z0-9 ]*$/ 我有一点正则表达式的经验,所以我认为这应该是可行的,但当我尝试以下字符串时: 1Athsj294-djs 在这里: 它不工作,请帮忙。谢谢 我认为您的正则表达式
/^[a-zA-Z][a-zA-Z0-9 ]*$/
我有一点正则表达式的经验,所以我认为这应该是可行的,但当我尝试以下字符串时:
1Athsj294-djs
在这里:
它不工作,请帮忙。谢谢 我认为您的正则表达式看起来不错,只是您必须删除
^
和$
应该如此
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
例如,您可以捕获
preg_match('/^[a-zA-Z][a-zA-Z0-9]*/',$string,$matches)
,并且$matches[0]将包含您的匹配项。如果你真的想进行预替换,那就需要前瞻性
$result = preg_replace('/^[^a-z]*([a-z][a-z0-9 ]*).*$/si', '\1', $subject);
变化
1Athsj294-djs
进入
说明:
^ # 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
修饰符使正则表达式不区分大小写,并允许点匹配换行符。请澄清您的要求。要从输入中提取连续子字符串还是非连续子字符串?示例输入的正确输出是什么?1Athsj294 DJ
?是Athsj294
还是Athsj294djs
,还是别的什么?我更喜欢Athsj294djs,但这似乎不是一个选项?因此,Athsj294将使用第一个preg\u replace
链接我接受的答案,并使用以下模式:/[^a-Za-z0-9]/
这给了我想要的Athsj294djs
结果,你可以捕获“DJ”,就像OP现在澄清的那样,通过捕获(.*)
作为第二个匹配字符串,将其与\1\2
一起放入结果中,然后进行第二次传递,在初始一致性字符之后清除不一致性字符:$result=preg_replace('/[^a-z0-9]/','',$result)代码>
^ # 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