Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换文本匹配regexp的子字符串_Java_Regex - Fatal编程技术网

Java 替换文本匹配regexp的子字符串

Java 替换文本匹配regexp的子字符串,java,regex,Java,Regex,我有这样的文本: 1. Must have experience in Java 2. Team leader... 我想在HTML中呈现一个有序列表。现在,在末尾添加标记非常简单: s = replace(s, ". ", "</li>"); s=replace(s,“.”,“”; 但是如何用替换1.,2.等呢 我有一个正则表达式\d*\.$,它将一个数字与一个句点相匹配,但问题是这是一个子字符串,所以匹配1。必须有Java 2方面的经验。团队负责人使用\d*\.$返回fal

我有这样的文本:

1. Must have experience in Java 2. Team leader...
我想在HTML中呈现一个有序列表。现在,在末尾添加
标记非常简单:

s = replace(s, ". ", "</li>");
s=replace(s,“.”,“”;
但是如何用
  • 替换
    1.
    2.
    等呢

    我有一个正则表达式
    \d*\.$
    ,它将一个数字与一个句点相匹配,但问题是这是一个子字符串,所以匹配
    1。必须有Java 2方面的经验。团队负责人
    使用
    \d*\.$
    返回
    false

    但是如何用
  • 替换
    1.
    2.
    等呢

    您可以使用允许regex而不是replace的:

    s = s.replaceAll("\\d+\\.\\s", "</li>");
    
    s=s.replaceAll(\\d+\\.\\s),“
  • ”;
    注意

    • 您不需要在正则表达式的末尾使用
      $
    • 您必须转义点
      ,因为它表示正则表达式中的任何字符
    • 您可以对一个空格使用
      \s
      ,或对零个或多个空格使用
      \s*
      ,或对一个或多个空格使用\s+
    但是如何用
  • 替换
    1.
    2.
    等呢

    您可以使用允许regex而不是replace的:

    s = s.replaceAll("\\d+\\.\\s", "</li>");
    
    s=s.replaceAll(\\d+\\.\\s),“
  • ”;
    注意

    • 您不需要在正则表达式的末尾使用
      $
    • 您必须转义点
      ,因为它表示正则表达式中的任何字符
    • 您可以对一个空格使用
      \s
      ,或对零个或多个空格使用
      \s*
      ,或对一个或多个空格使用\s+
    代码

    替换

    <li>$1</li>\n
    
  • $1
  • \n

    后果 输入
  • 必须有Java 2方面的经验。队长
  • 输出
  • 必须有Java方面的经验
  • 队长

  • 解释
    • \d+
      匹配一个或多个数字
    • \。
      按字面意思匹配点字符
    • \s+
      匹配一个或多个空白字符
    • (.*)
      将任意字符捕获任意次数,但尽可能少地捕获到捕获组1中
    • \s*
      匹配任意数量的空白字符
    • (?=\d+\.\s+\$)
      正向前瞻,确保以下任一项不匹配
    • \d+\.\s+
      • \d+
        匹配一个或多个数字
      • \。
        按字面意思匹配点字符
      • \s+
        匹配一个或多个空白字符
    • $
      在行尾断言位置
    代码

    替换

    <li>$1</li>\n
    
  • $1
  • \n

    后果 输入
  • 必须有Java 2方面的经验。队长
  • 输出
  • 必须有Java方面的经验
  • 队长

  • 解释
    • \d+
      匹配一个或多个数字
    • \。
      按字面意思匹配点字符
    • \s+
      匹配一个或多个空白字符
    • (.*)
      将任意字符捕获任意次数,但尽可能少地捕获到捕获组1中
    • \s*
      匹配任意数量的空白字符
    • (?=\d+\.\s+\$)
      正向前瞻,确保以下任一项不匹配
    • \d+\.\s+
      • \d+
        匹配一个或多个数字
      • \。
        按字面意思匹配点字符
      • \s+
        匹配一个或多个空白字符
    • $
      在行尾断言位置
      • 我们想要

        <ol>
          <li>one</li>
          <li>two<li>
        </ol>
        
        
        
      • 一个
      • 两个
      • 这可以通过以下方式实现:

        s = s.replaceAll("(?s)(\\d+\\.)\\s+(.*\\.)\\s*", "<li>$2</li></ol>");
        s = s.replaceFirst("<li>", "<ol><li>");
        s = s.replaceAll("(?s)</li></ol><li>", "</li>\n<li>");
        
        s=s.replaceAll(“(?s)(\\d+\\)\\s+(.\\)\\s*”,“
      • $2
      • ”; s=s.replaceFirst(“
      • ”,“
      • ”); s=s.replaceAll(“(?s)
      • ”,“
      • \n
      • ”;
      • 诀窍是首先添加一个伪
        ,该伪
        应该只保留在最后一个列表项之后

        (?s)
        是点球符号,导致
        也匹配换行符

        如果有多个编号列表,则不适用。它还假设每个列表项只有一句话。

        我们想要

        <ol>
          <li>one</li>
          <li>two<li>
        </ol>
        
        
        
      • 一个
      • 两个
      • 这可以通过以下方式实现:

        s = s.replaceAll("(?s)(\\d+\\.)\\s+(.*\\.)\\s*", "<li>$2</li></ol>");
        s = s.replaceFirst("<li>", "<ol><li>");
        s = s.replaceAll("(?s)</li></ol><li>", "</li>\n<li>");
        
        s=s.replaceAll(“(?s)(\\d+\\)\\s+(.\\)\\s*”,“
      • $2
      • ”; s=s.replaceFirst(“
      • ”,“
      • ”); s=s.replaceAll(“(?s)
      • ”,“
      • \n
      • ”;
      • 诀窍是首先添加一个伪
        ,该伪
        应该只保留在最后一个列表项之后

        (?s)
        是点球符号,导致
        也匹配换行符


        如果有多个编号列表,则不适用。它还假设每个列表项只有一句话。

        @Reimeus用户不是在解析HTML,而是在尝试生成它。@Reimeus用户不是在解析HTML,而是在尝试生成它。这是有效的,(尽管在您的回答中,字符串在需要时用
      • 替换正则表达式匹配)但是@ctwheels的答案更可靠。哦,对不起,我误解了这个评论。如果你看@ctwheels在“output”下的答案,那正是我想要的。虽然公平地说,我对开始的标签更感兴趣,但结束的标签不那么复杂。没关系@mohammedkhan这只是一个评论,我很高兴ctwheels能帮到你;)这是可行的,(虽然在您的答案中,当需要时,您的字符串将regex匹配替换为
      • ),但是@ctwheels answer更为健壮。哦,对不起,我误解了这个评论。如果你看@ctwheels在“output”下的答案,那正是我想要的。虽然公平地说,我对获得开场白更感兴趣