正则表达式匹配一对标签中的特定字符?

时间:2017-06-24 07:19:42

标签: regex

例如,此<([a-z][a-z0-9]*)\b[^>]*>(.*?)</\1>将匹配任何一对标记所包含的整行文本。但是如何匹配该行中的某个特定字符?例如,直单引号或撇号(')?

更新

以下是一些例子:

1)匹配单引号或撇号(')

<p>Lorem ipsum dolor sit amet, consectetu'r adipisicing elit.</p>

2)匹配单词 adipisicing 开头的双引号(这个单词只是一个例子,可以是任何单词或单个字母)。

<p>Lorem ipsum dolor sit amet, consectetur "adipisicing" elit.</p>

3)匹配单词 adipisicing 末尾的双引号(这个单词只是一个例子,可以是任何单词或单个字母)。

<p>Lorem ipsum dolor sit amet, consectetur "adipisicing" elit.</p>

表达式不应与任何标记对之外的任何内容匹配。在上面的示例中,它是一个段落,但它可以是任何内容:标题,范围,字体标记等。

更新#2

<link rel="stylesheet" type="text/css" href="styles.css" />

<span>hello, the world's ugliest dog</span><br>

<span>hello "world"</span><br>

<span>hello 'world'</span>

<p class="someclassname">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt "u" labore et dolore's magna aliqua.
</p>
<p class="someclassname">
    Lorem 'ipsum' dolor sit amet, consectetur's adipisicing elit, sed do eiusmod tempor "incididunt" ut labore et dolore magna aliqua.
</p>

1 个答案:

答案 0 :(得分:1)

替换那些单引号和双引号。

这适用于Notepad ++

查找内容

<([a-zA-Z]\w*).*?>[^'"]+?\K(?:(['])((\w+)\2)?|(["])((\w+)\5)?)(?=[^<]*<\/\1>)

替换为

(?{2}’)(?{3}$4’)(?{5}“)(?{6}$7”)

搜索模式:正则表达式(选中. matches newline

注意:使用“全部替换”,但在我的Notepad ++版本中,单步替换不能用于某种方式。
如果1个标签内容中的引号包含多于1个单词,则可能必须按全部替换按钮几次

要了解其中发生的情况,请参阅test here on regex101

正则表达式使用惰性匹配.*?到第一个单引号或双引号字符,而双qoute的第二个出现是可选的。
\K确保第一部分不被消费 正如最后一部分的正向前瞻(?=一样。

关于替换。
由于Notepad ++使用Boost的正则表达式引擎,因此可以使用条件替换。