replace函数

php中正则表达式详解

巧了我就是萌 提交于 2020-03-13 06:24:14
概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。常用的语言基本上都有正则表达式,如JavaScript、java等。其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些。文本主要围绕解决下面问题展开。 有哪些常用的转义字符 什么是限定符与定位符 什么是单词定位符 特殊字符有哪些 什么是逆向引用以及怎样使用逆向引用 匹配模式 php中怎样使用正则表达式 php中哪些方面需要用到正则 怎样进行邮箱匹配,url匹配,手机匹配 怎样使用正则替换字符串中某些字符 贪婪匹配与惰性匹配区别 正则表达式之回溯与固态分组 正则优缺点有哪些 正则表达式的基本知识汇总 行定位符(^与$) 行定位符是用来描述字符串的边界。 “$” 表示行结尾 “^” 表示行开始如 "^de" ,表示以de开头的字符串 "de$" ,表示以de结尾的字符串。 单词定界符 我们在查找的一个单词的时候,如an是否在一个字符串”gril and body”中存在,很明显如果匹配的话,an肯定是可以匹配字符串“gril and body”匹配到,怎样才能让其匹配单词,而不是单词的一部分呢?这时候,我们可以是哟个单词定界符\b。 \ban\b 去匹配”gril and body”的话,就会提示匹配不到。 当然还有一个大写的\B,它的意思,和\b正好相反

str_replace函数详解

懵懂的女人 提交于 2020-03-02 04:49:52
在开发过程中,字符串的操作是很频繁的,这几天有看PHP手册中讲解str_replace函数的讲解,不是很明白,特作如下笔记,以作备忘。 函数原型: mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) 参数说明:$search要被搜索替换的字符串,$replace要替换搜索的字符串, $subject操作的字符串, &$count替换次数。 访函数返回在 $subject搜索 $search替换为 $replace的字符串或数组。 1、 $search和$replace都是字符串 示例:str_replace("a", "apple", "I like eat apple."); 说明:在$subject中将 $search字符串替换为 $replace字符串即可。 返回:"I like eapplet applepple."。 2、 $search为数组 示例:str_replace(array("a", "p"), "apple", "I like eat apple."); 说明:在$subject中将 $search数组中的各个字符串元素依次分别替换为 中$replace字符串即可。 返回:"I like eaappleapplelet

js 文本替换replace()你所不知的

99封情书 提交于 2020-03-02 04:25:18
今天看了一个函数,功能是把形如word-word的字符串转化为wordWord: 1 // 把word-word转化为wordWord 2 function camelize(s){ 3 return s.replace( / -(\w) / g, function (strMatch, p1){ 4 return p1.toUpperCas(); 5 }); 6 } 这里应用到了文本替换函数replace,他的一般语法估计大家都已经耳熟能详了,现在介绍一下当他的第二个参数为函数时的情形。 今天我在群里发这个函数的时候,有个人反映很快,说上面的那个正则写错了“ / -(\w) / g”,而后很快又明白了,他的疑惑是这个“()”,其实这个括号是很必要的: (x)匹配x,将x保存在名为$1,$2...$9的变量中,其实就是给其加一个索引,方便后面的调用。如果不加这个括号就会出错了: 好的,下面介绍一下函数参数的意义,为什么这个函数能够实现指定的功能呢? ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在

nagiosQL访问时报错PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

与世无争的帅哥 提交于 2020-03-02 04:21:46
nagiosQL安装环境: CentOS release 6.4 (Final) php-5.5.4 nagiosql_320 nginx version: nginx/1.2.3 安装一切正常,当访问nagiosQL界面时会提示: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 查看nginx日志提示: PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 解决方法: 由于方法preg_replace()为PHP 5.5.x 中废弃的特性,官方建议需要在代码中将preg_replace()替换为函数preg_replace_callback,可以问题解决。 (具体请见官方介绍: http://www.php.net/manual/zh/migration55.deprecated.php ) 此问题涉及到nagiosQL文件: /usr/local/nagios/nagiosql/libraries/pear/HTML/Template/IT.php

正则替换replace中$1的用法以及常用正则

為{幸葍}努か 提交于 2020-03-02 04:21:36
一、 repalce定义 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 stringObject.replace(regexp/substr,replacement); 参数一:必需,规定的字符串或者正则表达式 参数二:必需,一个字符串值。规定了替换文本或生成替换文本的函数。 !!!replacement 中的 $ 字符具有特定的含义。详情见W3C    二、有$1,$2...的例子 //把 "Doe, John" 转换为 "John Doe" 的形式: var str = "Doe, John"; str.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); 说明:$1,$2上就是按顺序对应小括号里面的小正则 捕获到的内容。       三,第二个参数是函数 把字符串中所有单词的首字母都转换为大写: var str = 'aaa bbb ccc'; uw=str.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} ); 说明:匹配一次就执行一次函数,匹配的内容作为参数 //把数字转成对应的汉子 var ary=["一","二","三","四","五","六"] "123456"

Replace Parameter with Explicit Methods (以明确函数取代参数

人盡茶涼 提交于 2020-03-02 03:08:57
Summary : 你有一个函数,其中完全取决于参数值而采取不同行为。 针对该参数的每一个可能值,建立一个独立函数。 动机: Replace Parameter with Explicit Methods 恰恰相反于 Parameterize Method 。如果某个参数有很多种可能的值,而函数内又以条件表达式检查这些参数值,并根据不同参数值做出不同的行为,那么就应该使用本项重构。调用者原本必须赋予参数适当的值,以决定该函数做出何种响应。现在既然你提供了不同的函数给调用者私用,就可以避免出现条件表达式。此外你还可以获得编译期检查的好处,而且接口也更清楚。如果以参数值决定函数行为,那么函数用户不但需要观察该函数,而且还要判断参数值是否合法,而“合法的参数值”往往很少在文档中被清楚地提出。 就算不考虑编译器检查的好处,只是为了 获得一个清晰的接口,也值得你执行本项重构。哪怕只是给一个内部的布尔变量赋值,相较之下, Witch.beOn() 也比 Switch.setState(true) 要清晰得多。 但是,如果参数值不会对函数行为有太多影响,你就不应该使用 Replace Parameter with Explicit Methods 。如果情况真这样,而你也只需要通过参数为一个字段赋值,那么直接使用设值函数就行了。如果的确需要条件判断的行为,可考虑使用 Replace

Replace Type Code with Class (以类取代类型码)

╄→尐↘猪︶ㄣ 提交于 2020-03-02 03:08:29
Summary : 类之中有一个数值类型码,但它并不影响类的行为。 以一个新的类替换该数值类型码。 动机: 在以 C 为基础的变成语言中,类型码或枚举值很常见。如果带着一个有意义的符号名,类型码的可读性还是不错的。问题在于,符号名终究是个别名,编译器所看见的、进行类型校验的,还是背后那个数值。任何接受类型码作为参数的函数所期望的实际上是一个数值,无法强制使用符号名。这会大大降低代码的可读性,从而成为 bug 之源。 如果把那样的数值换成一个类,编译器就可以对这个类进行类型校验。只要为这个类提供工厂函数,你就额可以始终保证只有合法的实例才会被创建出来,而且它们都会被传递给正确的宿主对象。 但是在使用 Replace Type Code with Class 之前,你应该先考虑类型码的其他替换方式。只有当类型码是纯数据时(也就是类型码不会在 switch 语句中引起行为变化时),你才能以类来取代它。 Java 只能以整数作为 switch 语句的判断依据,不能使用任意类,因此在那种情况下不能够以类替换类型码。更重要的是:任何 switch 语句都应该运用 Replace Conditional with Polymorphism 去掉。为了进行那样的重构,你首先运用 Replace Type Code with Subclasses 或 Replace Type Code with

Replace Constructor with Factory Method (以工厂函数取...

匆匆过客 提交于 2020-03-02 02:42:48
Summary: 你希望在创建对象时不仅仅是做简单的建构动作。将构造函数替换为工厂函数。 Motivation: 使用该手法最显而易见的动机是在派生子类的过程中以工厂函数取代类型码。你可能常常需要根据类型码创建相应的对象,现在,创建名单上还得加上子类,那些子类也是根据类型码来创建。然而由于构造函数只能返回单一类型的对象,因此需要将构造函数替换为工厂函数。 此外,如果构造函数的功能不能满足需要,也可以使用工厂函数来代替它。工厂函数也是Change Value to Reference的基础。可以令工厂函数根据参数的个数和类型,选择不同的创建行为。 Mechanics: 1.新建一个工厂函数,让它调用现有的构造函数。 2.将调用构造函数的代码改为调用工厂函数。 3.每次替换后编译并测试 4.将构造函数声明为private 5.编译 范例1. 根据整数(实际是类型码)创建对象 以员工薪资系统为例,“Employee”表示“员工”: class Employee{ private int type; static final int ENGINEER = 0; static final int SALESMAN = 1; static final int MANAGER = 2; Employee(int type){ this.type = type; } }

Replace Conditional with Polymorphism (以多态取代条件表达式)

落花浮王杯 提交于 2020-03-02 02:42:33
Summary : 你手上有个条件表达式,它根据对象类型的不同而选择不同的行为。 将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数。 Motivation: 在面向对象术语中,听上去最高贵的词非“多态”莫属。多态最根本的好处就是:如果你需要根据对象的不同类型而采取不同的行为,多态使你不必编写明显的条件表达式。 正因为有了多态,所以你会发现:“类型码的 switch 语句”以及“基于类型名称的 if-then-else 语句”在面向对象程序中很少出现。 多态能够给你带来很多好处。如果同一组条件表达式在程序许多地点出现,那么使用多态的收益是最大的。使用条件表达式时,如果你想添加一种新类型,就必须查找并更新所有条件表达式。但如果改用多态,只需建立一个新的子类,并在其中提供适当的函数就行了。类的用户不需要了解这个子类,这就大大降低了系统各部分之间的依赖,使系统升级更加容易。 Mechanics: 使用 Replace Conditional with Polymorphism 之前,首先必须由一个继承结构。你可能已经通过先前的重构得到了这一结构。如果还没有,现在就需要建立它。 要建立继承结构,有两种选择: Replace Type Code with Subclasses 和 Replace Type Code with State/Strategy

Replace Type Code with State/Strategy

半城伤御伤魂 提交于 2020-03-02 02:42:13
Summary : 你有一个类型码,它会影响类的行为,但你无法通过继承手法消除它。 以状态对象取代类型码。 动机: 本项重构和 Replace Type Code with Subclasses 很相似,但如果“类型码的值在对象生命期中发生变化”或“其他原因使得宿主类不能被继承”,你也可以使用本重构。本重构使用 State 模式或 Strategy 模式。 State 模式和 Strategy 模式非常相似,因此无论你选择其中哪一种,重构过程都是相同的。“选择哪一个模式”并非问题关键所在,你只需要选择更适合特定情境的模式就行了。如果你打算在本项重构完成之后再以 Replace Conditional with Polymorphism 简化一个算法,那么选择 Strategy 模式比较合适;如果你打算搬移与状态相关的数据,而且你把新建对象视为一种变迁状态,就应该选择使用 State 模式。 做法: 1. 使用 Self Encapsulate Field 将类型码自我封装起来。 2. 新建一个类,根据类型码的用途为它命名。这就是一个状态对象。 3. 为这个新类添加子类,每个子类对应一种类型码。 à 比起逐一添加,一次性加入所有必要的子类可能更简单些。 4. 在超类中建立一个抽象的查询函数,用以返回类型码。在每个子类中覆写该函数,返回确切的类型码。 5. 编译。 6.