当字符串在注释中时,如何改进此正则表达式以使其不匹配

曼努埃尔·迪奥里奥(Manuel Di Iorio)

给出以下示例文本:

<input type="text" value="<? print(variable); ?>">

<? /*<br><br><small>Data:</small>

<input type="text" value="<? print(data); ?>"> */ ?>

<textarea><? print(yuppy); ?></textarea>

要捕获所有内容(一个一个)?>我用:

/<\?\s*([\s\S]+?)\s*\?>/g

这个正则表达式的问题是它甚至可以匹配<??>里面的/ * * /// (注释)这不是期望的行为。

当这些字符串不在注释中时,如何改善该正则表达式以正确匹配这些字符串?


需要明确的是,正确的匹配项应为:

1) print(variable);
2) /*<br><br><small>Data:</small>

<input type="text" value="<? print(data); ?>"> */
3) print(yuppy);

相反,使用我的正则表达式,第二个匹配项是:

/*<br><br><small>Data:</small>

<input type="text" value="<? print(data);

更新:

乔什·克罗齐耶(Josh Crozier)的回答几乎是正确的,但有一点错误

他的正则表达式<\?\s*((?:.*\/\*[\s\S]+\*\/.*)|(?:[\s\S]+?))\s*\?>https://regex101.com/r/oL5iV0/2错误匹配

<? /* hello */ ?>
html
<? /* world*/ ?>

甚至使用https://regex101.com/r/qW7mR7/1

<input type="text" value="<? print(code); ?>"> <? /* */ ?>

在最新的示例中,仅当出现换行符时,它才正确匹配。在第一个示例中,即使有换行符也无法正确匹配

卡西米尔和希波吕特

您可以使用以下模式(删除空格和注释以使其与javascript一起使用):

<\?  # opening tag
[^?\/]* # all that is not a ? or a /
(?:
    \/ # a slash:
    (?:
        (?![\/*]) [^?\/]*  # - not followed by a slash or a *
      |
        \/.*(?:\n[^?\/]*)? # - that starts a single line comment
      | 
        \*                 # - that starts a multiline comment
        [^*]* (?:\*+(?!\/)[^*]*)* # (comment content)
        (?:\*\/ [^?\/]* | $)      # */ is optional
    )
  |
  \?(?!>) [^?\/]* # a ? not followed by a >
)*
(?:\?>|$) # optional closing tag ?>

演示

请注意,这种模式不会造成催化倒退,因为毕竟<\?这是可选的,尤其是结束标记?>和多行注释的结尾*/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何修改此正则表达式以使其与Python中的“&”不匹配?

来自分类Dev

如何查找在正则表达式中不包含字符串的匹配项

来自分类Dev

正则表达式匹配此字符串

来自分类Dev

正则表达式不匹配字符串

来自分类Dev

正则表达式与字符串不匹配

来自分类Dev

字符串与正则表达式不匹配

来自分类Dev

正则表达式与字符串不匹配

来自分类Dev

正则表达式-仅在中间部分与某些字符串不匹配时匹配

来自分类Dev

正则表达式-仅在中间部分与某些字符串不匹配时匹配

来自分类Dev

在正则表达式JAVA中使用模式匹配器时如何获取剩余的不匹配字符串?

来自分类Dev

如何使用正则表达式匹配数字而不匹配字符串?

来自分类Dev

如何修复此URL正则表达式以匹配字符串末尾的URL?

来自分类Dev

如何在emacs中使用正则表达式匹配此字符串?

来自分类Dev

正则表达式在字符串重复时不匹配

来自分类Dev

当字符串包含空格时,正则表达式不匹配

来自分类Dev

输入字符串包含与号时,正则表达式不匹配

来自分类常见问题

分割不包含与Java中的正则表达式匹配的相邻字符的字符串

来自分类Dev

正则表达式:匹配字符串中的单词,但仅当行不包含斜杠时

来自分类Dev

如何正则表达式匹配和正则表达式替换php中的字符串

来自分类Dev

为什么此正则表达式与 docker 自动构建中的此字符串不匹配

来自分类Dev

如何使用正则表达式提取字符串的不匹配部分

来自分类Dev

如何完全丢弃与正则表达式模式不匹配的字符串的出现?

来自分类Dev

如何搜索与正则表达式不匹配的字符串

来自分类Dev

正则表达式查找不匹配的字符串中的整数

来自分类Dev

Python正则表达式不匹配字符串中的所有模式

来自分类Dev

正则表达式查找字符串中不匹配的整数

来自分类Dev

在Python中删除与正则表达式不匹配的子字符串

来自分类Dev

正则表达式不匹配字符串C#中的连续数字

来自分类Dev

正则表达式与 Google Analytics 中的字符串不匹配

Related 相关文章

  1. 1

    如何修改此正则表达式以使其与Python中的“&”不匹配?

  2. 2

    如何查找在正则表达式中不包含字符串的匹配项

  3. 3

    正则表达式匹配此字符串

  4. 4

    正则表达式不匹配字符串

  5. 5

    正则表达式与字符串不匹配

  6. 6

    字符串与正则表达式不匹配

  7. 7

    正则表达式与字符串不匹配

  8. 8

    正则表达式-仅在中间部分与某些字符串不匹配时匹配

  9. 9

    正则表达式-仅在中间部分与某些字符串不匹配时匹配

  10. 10

    在正则表达式JAVA中使用模式匹配器时如何获取剩余的不匹配字符串?

  11. 11

    如何使用正则表达式匹配数字而不匹配字符串?

  12. 12

    如何修复此URL正则表达式以匹配字符串末尾的URL?

  13. 13

    如何在emacs中使用正则表达式匹配此字符串?

  14. 14

    正则表达式在字符串重复时不匹配

  15. 15

    当字符串包含空格时,正则表达式不匹配

  16. 16

    输入字符串包含与号时,正则表达式不匹配

  17. 17

    分割不包含与Java中的正则表达式匹配的相邻字符的字符串

  18. 18

    正则表达式:匹配字符串中的单词,但仅当行不包含斜杠时

  19. 19

    如何正则表达式匹配和正则表达式替换php中的字符串

  20. 20

    为什么此正则表达式与 docker 自动构建中的此字符串不匹配

  21. 21

    如何使用正则表达式提取字符串的不匹配部分

  22. 22

    如何完全丢弃与正则表达式模式不匹配的字符串的出现?

  23. 23

    如何搜索与正则表达式不匹配的字符串

  24. 24

    正则表达式查找不匹配的字符串中的整数

  25. 25

    Python正则表达式不匹配字符串中的所有模式

  26. 26

    正则表达式查找字符串中不匹配的整数

  27. 27

    在Python中删除与正则表达式不匹配的子字符串

  28. 28

    正则表达式不匹配字符串C#中的连续数字

  29. 29

    正则表达式与 Google Analytics 中的字符串不匹配

热门标签

归档