精华内容
下载资源
问答
  • 原以为只是一个简单的正则替换问题,出现问题可能是正则或是其它书写的原因. 仔细分析了一下,确实存在问题,事实证明不能小视任何的一个问题哈^_^ 举个例子来说明问题: string  a  =   "  id=\ " t1\ "  ...

    刚在论坛上看到一个非常有意思的问题?

    result   =   Regex.Replace(result,   @"( <a(?=[^ <> ]*?id=""t1"").*?href="")[^""]*(""[^> ]*> )[\s\S]*?(?= </a> )",   string.Format("$1{0}$2{1}",   textBox12.Text,   textBox11.Text),   RegexOptions.IgnoreCase);

    我用上面的正则表达式想分别替换   <a   id="t1"   class=link_blue   href="http://article.ednchina.com/Commu/20071219071733.htm"> Infonetics:WiMAX设备销售额上升势头增强 </a>   中的红色部分,可是如果textBox12.Text中的字符是以数字开始的,替换就出现了问题,原文就被替换成为 <a   id="t1"   class=link_blue   href="http://article.ednchina.com/Other/20080108052252.htm$22008国际CES更“绿”了 </a>    
    为什么把后面> 改为了$2,请问应该怎么解决呢?

    原以为只是一个简单的正则替换问题,出现问题可能是正则式或是其它书写的原因.
    仔细分析了一下,确实存在问题,事实证明不能小视任何的一个问题哈^_^

    举个例子来说明问题:

    string a = "<a   id=\"t1\"   class=link_blue   href=\"http://article.ednchina.com/Commu/20071219071733.htm\"> Infonetics:WiMAX设备销售额上升势头增强 </a> ";
    string reValue = "1212";
    string reValue1 = "CSDN";
                
    string regex = "(<a[\\s\\S]*?id=\"t1\"[\\s\\S]*?href=\")[\\s\\S]*?(\"[^>]*?>)[^<]*?(\\</a>)";
    string result = Regex.Replace(a, regex,string.Format("$1{0}$2{1}$3", reValue, reValue1));

    上面的例子是一个普通的正则替换例子,一般情况下不会出现任何问题,不过并不是没有问题,以上的参数中就会出现我们所说的问题了,我们的reValue为1212为数学,当字符串连接起来的时候,你们的替换表达式就会生成为:
    $11212$2CSDN$3这种形式.地球人都知道得不到正确的替换...
    很明显现在非常命名组的引用已经不能解决我们的问题,所以我们今天所说的主角上场了.
    ${name}替换由组(?<name>)匹配的最后一个子串.
    用这种方式去捕获匹配值,当然也就不会与数学冲突了,即写成
    string r = Regex.Replace(a, regex, string.Format("${t1}{0}${t2}{1}${t3}", reValue, reValue1));
    这种命名组替换模式,当然我们的替换模式都改了,当然我们的正则表达式也需要改了,几些天太大意了,忘记把修改成命名组匹配的正则表达式贴上来了,谢谢楼下朋友的提醒^_^,现在补上
    修正为命名组匹配的正则表达式就应该为:
    string regex = "(?<t1><a[\\s\\S]*?id=\"t1\"[\\s\\S]*?href=\")[\\s\\S]*?(?<t2>\"[^>]*?>)[^<]*?(?<t3>\\</a>)";

    很郁闷,异常--!,输入字符串的格式不正确
    很容易原因应该就是在string.Format中使用了花括号{},所以编译器就会把它误认为是一个格式项,也不知道是不是这样称呼^_^,还望朋友们指正,(下面的内容摘自MSDN)

    格式项的语法是 {index[,alignment][:formatString]},它指定了一个强制索引、格式化文本的可选长度和对齐方式,以及格式说明符字符的可选字符串,其中格式说明符字符用于控制如何设置相应对象的值的格式。格式项的组成部分包括:

    index

    从零开始的整数,指示对象列表中要格式化的元素。如果由 index 指定的对象是 空引用(在 Visual Basic 中为 Nothing),则格式项将被空字符串 ("") 替换。

    alignment

    可选整数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于 alignment,则用空格填充该区域。如果 alignment 为负,则格式化的值将在该区域中左对齐;如果 alignment 为正,则格式化的值将右对齐。如果没有指定 alignment,则该区域的长度为格式化值的长度。如果指定 alignment,则需使用逗号。

    formatString

    可选的格式说明符字符串。如果没有指定 formatString,并且对应的参数实现了 IFormattable 接口,则将 空引用(在 Visual Basic 中为 Nothing) 用作 IFormattable.ToString 格式字符串。因此,IFormattable.ToString 的所有实现都必须允许 空引用(在 Visual Basic 中为 Nothing) 作为格式字符串,并以 String 对象的形式返回对象表示形式的默认格式设置。如果指定 formatString,则必须使用冒号。

    必须使用前导大括号字符和后缀大括号字符,即“{”和“}”。若要在 format 中指定单个大括号字符,请指定两个前导大括号字符或后缀大括号字符(即“{{”或“}}”)。

    问题弄清楚了,解决方案也找到了^_^
    只需要把上面的替换表达式改为

    string r = Regex.Replace(a, regex, string.Format("${{t1}}{0}${{t2}}{1}${{t3}}", reValue, reValue1));

    问题就可以得到解决,也可以不采用string.Format格式项的方式.直接采用原始的字符串拼接,也可实现

    string result = Regex.Replace(a, regex, "${t1}"+reValue+"${t2}"+reValue1+"${t3}");

    哎,总算说清楚了,不过貌似有很多费话,希望朋友们表丢砖头^_^

     

    转载于:https://www.cnblogs.com/symbol441/archive/2008/01/09/1031604.html

    展开全文
  • 使用面向对象的语言编写业务时,为了提高代码的复用度,会经常继承现有的类...她在设计领域影响最深的就是以她的名字命名的 Liskov 替换原则(Liskov substitution principle,简称 LSP)。她是这么描述这条规则的: If

    使用面向对象的语言编写业务时,为了提高代码的复用度,会经常继承现有的类,继承也是面向对象语言的三大特性之一,其他两个是封装和多态。那有没有办法判断继承实现的合理性呢?有的,使用里式替换原则来判断继承的合理性。

    如何理解里式替换原则

    2008年,图灵奖授予 Barbara Liskov,表彰她在程序语言设计和系统设计方法方面的卓越工作。她在设计领域影响最深的就是以她的名字命名的 Liskov 替换原则(Liskov substitution principle,简称 LSP)。她是这么描述这条规则的:
    If S is a subtype of T, then objects of type T may be replaced with objects of type S, without breaking the program
    中文翻译是:如果S是T的子类型,那么T类型的对象可以被S类型的对象替换,而不会破坏现有的程序。
    在1996年,Robert Martin 在他的SOLID 原则中,重新描述了这个原则,英文为:
    Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it
    中文直译为:使用基类的引用的指针的函数必须可以无条件的更换使用派生类的对象。

    综合两位大神的描述,我们可以简单的描述这条规则:子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变以及正确性不被破坏。

    如何判断代码符合或者违反了里式替换原则

    基于行为的 IS-A

    IS-A ,是说,如果A是B的子类,就需要满足A是一个B(A is a B )。
    有一个经典的样例经常用来解释这个原则,也就是长方形正方形问题。在数学中,我通常理解的是正方形是一种特殊的长方形。所以根据直觉,我们会写出这样的代码:

    class Rectangle {
      private int height;
      private int width;
      
      // 设置长度
      public void setHeight(int height) {
        this.height = height;
      }
      
      // 设置宽度
      public void setWidth(int width) {
        this.width = width;
      }
      
      //
      public void area() {
        return this.height * this.width;
      }
    }
    
    class Square extends Rectangle {
      // 设置边长
      public void setSide(int side) {
        this.setHeight(side);
        this.setWidth(side);
    t
      }
      
      @Override
      public void setHeight(int height) {
        this.setSide(height);
      }
    
      @Override
      public void setWidth(int width) {
        this.setSide(width);
      }
    }
    

    这段代码看上去一切很好,但是,它却是有问题的,因为它在下面的测试里会失败:

    Rectangle rect = new Square();
    rect.setHeight(4); // 设置长度
    rect.setWidth(5);  // 设置宽度
    assertThat(rect.area(), is(20)); // 对结果进行断言
    

    在这里,Rectangle 不能被 Square 替换,这里违反了LSP的核心定义。

    Design By Contract , 按照协议来设计

    子类在设计的时候,要遵守父类的行为约定(协议),父类定义了函数的行为约定,子类可以改变函数的内部实现逻辑,但不能改变函数原有的行为约定。这里的行为约定主要包括:函数要实现的功能;对输入、输出 、异常的约定;甚至包括注释中所罗列的任何特殊说明。
    举几个例子来具体说明下

    1.子类违背父类声明要实现的功能
    父类中有个排序方法 order() , 按照数字降序,子类再覆写此方法时,按照数字升序排序,此时,子类的设计就违背了里式替换原则。

    2.子类违背父类对输入、输出、异常的约定
    在父类的某个方法约定如果没有数据时返回 empty colletion, 子类覆写时返回了 null 。
    在父类的某个方法输入参数可以是任意整数,子类覆写时只允许为正整数,子类的数据校验更加严格。
    在父类的某个方法约定只抛出 ArgumentNullException 异常,子类实现时抛出了其它的异常。

    3.子类违背父类注释中所罗列的任何特殊说明
    父类中定义的 withdraw() 提现函数的注释是这么写的:“用户的提现金额不得超过账户余额……”,而子类重写 withdraw() 函数之后,针对 VIP 账号实现了透支提现的功能,也就是提现金额可以大于账户余额,那这个子类的设计也是不符合里式替换原则的。

    总结

    里式替换原则用来指导继承关系中子类如何设计的一个原则。理解这一原则的核心是 IS-ADesgin by contract
    里式替换原则存在的意义如下:
    1、改进现有实现,例如程序原先采用低效的排序算法,改进时使用LSP原则实现更高效的排序算法
    2、指导程序开发,指导我们如何组织类和子类,子类的方法要符合 contract( 协议)
    3、改进抽象设计,如果一个子类的设计违反了LSP,那么要思考是不是抽象或者设计出了问题

    展开全文
  • 其实通过逆向工程,然后去配置一些config,就可以实现,从Table到Model的相互转换,而且,对于下划线命名的Table字段,实现驼峰式命名的Model ,有时候我们只是做个测试,或者自己基于数据的表,想快速建立Model,...

    其实通过逆向工程,然后去配置一些config,就可以实现,从Table到Model的相互转换,而且,对于下划线命名的Table字段,实现驼峰式命名的Model ,有时候我们只是做个测试,或者自己基于数据的表,想快速建立Model,怎么实现呢!!

    三种方式

    第一种 IDEA + 可多行编辑的文本编辑器

    第二种 简单的编辑器(除了windows自带的),正则替换

    第三种 IDEA插件

    一、准备工作,好点的编辑器,支持多行编辑的,IDEA就可以,还有UE,Hbuilder等

    1.1 先查出某张表的所有字段,copy 一下,这是下划线命名的

    user_id

    brief

    create_time

    district

    email

    enable

    facebook_id

    favourite

    is_lock_time

    last_login_time

    nickname

    pass_word

    phone

    photo

    twitter_id

    wechat_id

    nick_review

    photo_review

    instagram_id

    device

    type

    customer_id

    复制到IDEA中,放到List中

    启动多行编辑,IDEA中同时按住,Ctrl Shift Alt 操作鼠标上下拉,即可多行编辑,同时左边加上双引号,Ctrl一下,同时跳到右边,再加上双引号,加上逗号,就好了

    二、代码示例,基于Hutool实现

    @Test

    public void camelTest11() {

    ArrayList list = Lists.newArrayList("user_id",

    "brief",

    "create_time",

    "district",

    "email",

    "enable",

    "facebook_id",

    "favourite",

    "is_lock_time",

    "last_login_time",

    "nickname",

    "pass_word",

    "phone",

    "photo",

    "twitter_id",

    "wechat_id",

    "nick_review",

    "photo_review",

    "instagram_id",

    "device",

    "type",

    "customer_id");

    List collect = list.stream().map(e -> StrUtil.toCamelCase(e)).collect(Collectors.toList());

    System.out.println(collect);

    }

    输出

    userId

    brief

    createTime

    district

    email

    enable

    facebookId

    favourite

    isLockTime

    lastLoginTime

    nickname

    passWord

    phone

    photo

    twitterId

    wechatId

    nickReview

    photoReview

    instagramId

    device

    type

    customerId

    然后再接着,复制到model中,多行编辑,就会很快完成,整个过程两分钟之内就可以完成。

    第二种,一种更简单的操作方式,使用正则替换

    下划线转驼峰式

    [_]{1,1}([a-z] replace U$1

    replace(使用regix),这里不知道为什么只能一个个replace替换,不能Replace ALl操作

    驼峰式转下划线

    ([A-Z]) replace _L$1

    也是一样的无法批量替换,其实也很方便的

    第三种,插件方式,应该更简单,我就没去试

    展开全文
  • 刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰命名规则。一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F(搜索...

      刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰式的命名规则。一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F(搜索功能),后来又无意用了一下替换功能,真的是好用的不行。废话不多,上图。

    选中该变量按Ctrl+F,然后点击图中的②按钮,就能选中代码中所有出现的这个变量,然后就可以进行更改了。只需要更改一个,其余的变量就都更改了。

     

     

    转载于:https://www.cnblogs.com/zhaoqipengbo/p/10686717.html

    展开全文
  • PHP正则分组替换

    千次阅读 2013-04-05 12:53:17
    * 将字符串转换为驼峰式命名 * @param string $str * @param boolean $big true大驼峰式 false小驼峰式 * @return string */ function humpType($str,$big=false){ $str=strtolower($str); $big and ucfirst...
  • (2)编程导航中,也可以使用命名路由的方式 如:this.$router.push({ name: 'user', params: { userId: '123' }}) 用法: 1、代替router-link标签中to传入路由路径,将router-link标签中的to替换成 :to="{name:...
  • 为提高NDN(命名数据网络)中的缓存利用率,提出了一种基于蚁群替换算法的邻居协作缓存管理(ACNCM)策略。首先将单节点的缓存替换问题,建模为0/1背包问题,并根据缓存数据的大小、使用频率以及邻居副本深度等信息...
  • wait方法waitpid方法两者用法区别获取子进程status使用示例状态查看小tips阻塞等待非阻塞等待注意进程替换为什么要有进程替换?什么是进程替换?替换函数函数解释命名理解示例如何进程替换? 进程退出 进程退出场景...
  • 命名式路由 重定向 从当前页面跳转到别的页面——也可以说,当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /b 通过 routes 配置 redirect 选项 <div id="app"> <p> <router-link to="/...
  • 编写toCamelCaseVar函数,将下划线格式的字符串替换成为驼峰的字符串,例如is_good转换为isGood 变量名首尾的下划线不需要处理 实现 这道题目必然要用到的就是String.prototype.replace方法 str.replace(regexp|...
  • 对指定路径下的指定类型的文件批量命名,包含在原文件名称的前面插入字符/在后面插入字符,或者替换部分字符,删除部分字符等命名方式。 缩放文档内的图片 将当前文档中插入的图片按指定的百分比缩小或者放大,以及...
  • 首先,我项目的 Java 代码规范是变量命名应用驼峰式命名法(Camel-Case)。数据库表名及字段名,则用下划线命名法(即用下划线分隔不同单词)。 我用 MBG 生成的代码,通过配置可以将下划线去掉,同时将下划线后的...
  • 运行本工程生成表配置内容,一定要连接参数lower_case_table_names配置为0或者2的数据库服务器,并且是配置为0或者2之后才创建的数据表,否则,生成的表配置内容的表名,全是小写的,并非驼峰式命名法。表配置内容...
  • 运行本工程生成表配置内容,一定要连接参数lower_case_table_names配置为0或者2的数据库服务器,并且是配置为0或者2之后才创建的数据表,否则,生成的表配置内容的表名,全是小写的,并非驼峰式命名法。表配置内容...
  • 9.1.使用RC实现滚动升级 #kubectl rolling-update ... 使用kubia-v2版本应用来替换运行着kubia-v1的RC,将新的复制控制器命名为kubia-v2,并使用luksa/kubia:v2最为镜像。  升级完成后使kubectl describe ...
  • 响应笔记(2)

    2017-01-14 17:20:00
    1、约定优于配置(convention over configuration):约定代码结构、命名规范来统一并减少代码配置数量 2、文件夹的组织 3、有用的文件1(robots.txt、favicon.ico、humans.txt) 1.建立404页面(404.html):找...
  • Zer0命名空间Dapp 本地发展 将.env文件添加到资源库的基础,将括号替换为适当的值: REACT_APP_RPC_URL_1=https://mainnet.infura.io/v3/[someMainnetNode] REACT_APP_RPC_URL_4=https://[someTestnet].infura.io/...
  • 最近在制作excel表的时候需要复制大量的excel并重命名,最后研究了一下有以下两种方法 方法一copy方法 1、在表格中用公式生成代码 ="copy 模板.xlsx "&C2&".xlsx" (其中.xlsx可以替换为其他任何格式) ...
  • 9.1.使用RC实现滚动升级 ... 使用kubia-v2版本应用来替换运行着kubia-v1的RC,将新的复制控制器命名为kubia-v2,并使用luksa/kubia:v2最为镜像。  升级完成后使kubectl describe rc ku...
  • 第1: 在js中用驼峰式命名,在html中替换成短横线 分割式命名 在html中 <child my-message="hello"/> 在js中: 子组件中 props:['myMessage'] 第2: props规范写法 如果 有默认值,而且是 数组或者对象类型,...
  • 1.全局安装vue-cli@4.5 npm uninstall -g @vue/cli //卸载脚手架,若本地没安装过,省略此步骤 ...vue create example_pro //example_pro替换为自己项目名称,名称不支持驼峰式命名 3 选择 >Default (Vue 3 Previe
  • 在对应表实体类中,实体类字段userName ...会自动将驼峰式命名字段替换为中间_. 导致启动失败,找不到user_name字段(数据库中的字段为username). 解决办法 加入注解别名 @column(name="数据库对应字段名称") ...
  • React-特殊标签属性

    2020-02-12 21:52:02
    行内的样式属性需要使用对象的形式书写,多个单词组成的属性使用驼峰式命名;最终要用 {} 在最外层对样式进行包裹; <able 标签的 for 属性要替换成 htmlFor。 示例: main.css * { margin: 0; padding: 0; } ...
  • java基础

    2021-03-07 12:57:06
    文章目录JAVA基础命名运算符二进制位操作控制语句判断语句循环语句数据类型基本数据类型(值传递)引用数据类型(地址传递)类与对象static代码块内部类OO面向对象三大特性封装继承extends方法重写与重载抽象...
  • 正则表达式可以帮助我们更好的...第一步先要引入有关正则命名空间: using System.Text.RegularExpressions;  第二步就是用指定的正则构建一个正则表达式对象,下面的正则是用来搜索长度为10的a-z的英
  • 正则表达式入门

    2016-05-20 16:12:00
    正则表达式可以帮助我们更...第一步先要引入有关正则命名空间: using System.Text.RegularExpressions; 第二步就是用指定的正则构建一个正则表达式对象,下面的正则是用来搜索长度为10的a-z的英文字母: R...
  • 并行EEPROM

    2020-11-14 18:49:35
    DIP的引脚配置如图所示:与AMD闪速存储器命名信号名称的方式不同,DU等同于NC,其他W,G,E分别等同于WE,OE和GE。我们知道引脚配置本身具各兼容性。  图 M2801O的引脚配置  并行EEPROM的内部也同闪速存储器...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 199
精华内容 79
关键字:

替换式命名