我发现如果提供的字符串中没有字母表,这个正则表达式可以正常工作。$string="12522191813381147500333332228323";echo$formattedString=preg_replace("/^(\d{8})(\d{4})(\d{4})(\d{4})(\d{12})$/","$1-$2-$3-$4-$5",$string);我的输入字符串有时会混合字母和数字。我必须做哪些改变才能使其在这两种情况下都能正常工作。我还有其他替代方法可以使用PHP的字符串函数迭代字符串并添加破折号,但我想了解如何使用正则表达式来实现它。 最佳答案
这是一个非常复杂的正则表达式,它从专有数据字符串返回键/值对数组。这是数据示例,以防express不能在.Net中使用,需要使用其他方法。0,"101"1,"12345"11,"ABCCompany"12,"JohnDoe"13,"123MainSt"14,""15,"Malvern"16,"PA"17,"19355"19,"UPS"21,"10"22,"GND"23,""24,"082310"25,""26,"0.00"29,"1Z1235550300000645"30,"PA1939-05"34,"6.55"37,"6.55"38,"8.05"65,"1Z1235550300000
我正在创建一个函数,我想从一组给定的字符中生成随机字符串。我想允许用户指定一个正则表达式字符类,而不是要求他们指定每个字符。例如:functiona($length,$allowed_chars){for($i=0,$salt="";$i如果allowedchars是所有允许字符的字符串,那么这很简单:$characterList{mt_rand(0,strlen($characterList)-1)};我希望能够像这样指定允许的字符"./0-9A-Za-z"而不是"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
在某些情况下,使用递归回溯的正则表达式实现可能会呈现指数级运行时间。我正试图为PCRE引擎找到这样一个病态的正则表达式。我已经尝试了几个正则表达式,这些正则表达式对于Perl正则表达式来说是指数级的(例如thisone),但是在我的测试中它们都没有表现出与PCRE的指数级运行时间。 最佳答案 在您的测试中,是否所有的正则表达式都预计会失败?当他们确实失败时,您是否找到了确切原因?可能匹配失败因为正则表达式引擎检测到过多的回溯。我不知道这种情况是否会发生,但请尝试使用应该会成功的正则表达式,例如:(?i)lorem(?:.|\s)*p
将preg_match与子模式一起使用总是会返回具有相同数据的双键数组,一个带有子模式名称,另一个带有数字标记。因为我要匹配数十万行,每行几千字节,恐怕数字数组会占用额外的内存。有什么正确的方法可以禁止数字标签数组返回吗?例子:.*?)go(es)*to(?.*?)$@m',$data,$matches);print_r($matches);?>输出:Array([0]=>Array([0]=>Igotoschool.[1]=>Hegoestofuneral.)[who]=>Array([0]=>I[1]=>He)[1]=>Array([0]=>I[1]=>He)[2]=>Array(
我一直在使用此/\(\s*([^)]+?)\s*\)/正则表达式通过PHPpreg_replace函数删除外括号(阅读我之前的更多内容问题Regextomatchanycharacterexcepttrailingspaces)。当只有一对括号时这工作正常,但问题是当有更多时,例如(test1t3()test2)变成test1t3(test2)而不是test1t3()test2。我知道正则表达式的限制,但如果我能让它不匹配任何东西,如果有超过一对括号,那就太好了。因此,示例行为就足够了:(测试1测试2)=>测试1测试2(test1t3()test2)=>(test1t3()test2)
我有一个包含用户博客内容的字符串。如果它们包括以下内容:www.google.comhttp://google.comhttp://www.google.com在他们的博文中,我希望PHP将这些事件替换为真正的超链接,但保留原始子字符串(即不将www.google.com更改为http://www.google.com).有谁知道我如何使用PHP和正则表达式来做到这一点?我试过这个:echopreg_replace('/((www|http:\/\/)[^]+)/','$1',$content);但这只有在链接以空格结尾时才会成功。如果以逗号或句号结尾则失败。
目前我有以下情况:我正在尝试“解析”文本,寻找占位符(它们的表示法是“{...}”),稍后,我将用实际文本替换它们。我想到了正则表达式$foo="HelloWorld{foo{bar}}WorldHello!";$bar=array();preg_match_all('@\{.+\}@U',$foo,$bar);var_dump($bar);但这会返回array(1){[0]=>array(1){[0]=>string(9)"{foo{bar}"}}让它变得贪婪会导致:array(1){[0]=>array(1){[0]=>string(10)"{foo{bar}}"}}但我希望结果是
下面的代码在我的PC上的XAMPP上运行完美,但在我新买的VPS上不起作用。它使我的代码崩溃。preg_match_all("/$regex/siU",$string,$matches,PREG_SET_ORDER);这应该只是从HTML中获取链接和标题。以前,今天也出现过类似的正则表达式问题。代码在本地服务器上运行良好,但在vps上创建“连接已重置”错误。该问题是由一些注释的html(其中包含php代码)引起的,使用以下代码将其删除以优化输出,但即使连接重置的问题已解决,HTML在浏览器源代码中仍然有注释。$string=preg_replace('//','',$string);那
我需要减少一个以上的或将两个图像之间的标签标记为只有一个。它需要足够自由以在图像中遇到任何类型的属性信息、任何元素之间的任何类型的空白以及两种形式的中断。请注意,我不想影响前面或后面的标签标签,仅限于两张图片之间的标签。这是我正在使用的:$content=preg_replace('/(]*>)+\s*?(\s*?)+\s*?(]*>)+/is','$1$3',$content);举个例子...Sometexthere.该模式应该只替换2ximage2和image3之间的标记。我不知道为什么我的模式不起作用,你能看出我不起作用吗?感谢您的帮助!编辑仅供引用,我无法控制$content中