【问题标题】:Regex matching beginning AND end strings正则表达式匹配开始和结束字符串
【发布时间】:2011-09-11 22:15:40
【问题描述】:

这似乎应该是微不足道的,但我对正则表达式不太擅长,这对谷歌来说似乎并不容易。

我需要一个以字符串“dbo”开头的正则表达式。并以字符串 '_fn' 结尾

就我而言,我不在乎这两个字符串之间的字符是什么,只要开头和结尾正确即可。

这是为了匹配 SQL 服务器数据库中的函数。

例如:

dbo.functionName_fn - Match

dbo._fn_functionName - No Match

dbo.functionName_fn_blah - No Match

【问题讨论】:

标签: regex


【解决方案1】:

如果您要在较大的文本中搜索命中,您不想像其他响应者所说的那样使用^$;那些匹配文本的开头和结尾。试试这个:

\bdbo\.\w+_fn\b

\b 是一个word boundary:它匹配一个前面有一个单词字符但后面没有一个,或者后面有一个单词字符但前面没有一个的位置。此正则表达式将在以下任何字符串中找到您要查找的内容:

dbo.functionName_fn
foo dbo.functionName_fn bar
(dbo.functionName_fn)

...但不在这个:

foodbo.functionName_fnbar

\w+ 匹配一个或多个“单词字符”(字母、数字或_)。如果您需要更具包容性的内容,可以尝试\S+(一个或多个非空白字符)或.+?(一个或多个除换行符以外的任何字符,非贪婪)。非贪婪的+? 防止它意外匹配dbo.func1_fn dbo.func2_fn 之类的东西,就好像它只是一击一样。

【讨论】:

  • 我有个问题不知道你知不知道。在 flex 中不支持 \b。你有什么想法在 flex 中实现 \b 吗?
【解决方案2】:
^dbo\..*_fn$

这应该对你有用。

【讨论】:

  • 仅供参考:^ 表示字符串的开头,$ 表示字符串的结尾。
  • @Daniel A. White \..* 是做什么用的?
  • @eawedat, \. 用于点本身,.* 用于任何字符的无限序列。
  • 用`\`转义它
【解决方案3】:

嗯,简单的正则表达式是这样的:

/^dbo\..*_fn$/

不过,最好使用您正在使用的任何编程语言的字符串操作功能来分割字符串的前四个和后三个字符,并检查它们是否是您想要的。

【讨论】:

  • 同意字符串操作。但是,我在 CodeSmith Generator 中使用它,并且无法访问源代码。不过谢谢!
  • @onesomeday \..* 是做什么用的?
  • @eawedat 意思是文字。字符后跟 0 个或多个其他字符。
【解决方案4】:
\bdbo\..*fn

我正在查看特定库的大量 Java 代码:car.csclh.server.isr.businesslogic.TypePlatform(尽管当时我只知道 carPlatform)。不幸的是,这里没有其他建议对我有用,所以我想我会发布这个。

这是我用来找到它的正则表达式:

\bcar\..*Platform

【讨论】:

    【解决方案5】:
    Scanner scanner = new Scanner(System.in);
    String part = scanner.nextLine();
    String line = scanner.nextLine();
    
    String temp = "\\b" + part + "|" + part + "\\b";
    Pattern pattern = Pattern.compile(temp.toLowerCase());
    Matcher matcher = pattern.matcher(line.toLowerCase());
    
    System.out.println(matcher.find() ? "YES" : "NO");
    

    如果您需要确定此文本的任何单词是否以序列开头或结尾,您可以使用此正则表达式:\bsubstring|substring\b:

    任何东西子字符串
    子字符串任何东西
    anysubstringanything

    【讨论】:

    • 什么编程语言? Java? C#?还有什么?
    【解决方案6】:

    您可以做的最简单的事情是:

    dbo.*_fn$

    它以dbo 搜索,后跟任何字符,然后以_fn 结尾。

    如果您能识别出n 之后的正确下一个字符是空格,则可以将$ 替换为空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2014-09-15
      • 2018-03-05
      • 2017-09-06
      • 2015-07-06
      相关资源
      最近更新 更多