这是一个挑战!
正如标题所说,我想匹配 HTML 文档中除 <pre>、<code> 和 <textarea> 标签之外的所有内容(例如,您可以尝试以下文本)。
在我的情况下,目的是压缩 html,删除\n\t\r 和其他清理,除非像 textarea 那样严格要求。
当我在 PHP 中工作时,我也考虑过提取这些标签内容,在 PHP 中处理其余部分并将它们重新注入(inject)到 PHP 中。但我很好奇在正则表达式中做到这一点的方法!
我试过伟大的在线编辑器:http://regex101.com/表达式 ((?=.?)((?!<pre>).))带有标志 'msg' 但不是我想要的。
任何帮助将非常感激!
Lorem ipsum dolor sat amet,consectetuer adipiscing elit,sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat。 Ut wisi enim ad minim veniam, quis nostrud exerciation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat。
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse Molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent praesent praesent de luptilitatum nulla facilisis at vero eros et accumsan et iusto odio dignissim Nam Liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum。
Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem。
Mirum est notare quam littera gothica、quam nunc putamus parum claram、anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima。Eodem modo typi,qui nunc nobis videntur parum clari, future 的未婚夫。
最佳答案
你可以使用这个:
$pattern = <<<'LOD'
~
# definitions :
(?(DEFINE) (?<tagBL> pre | code | textarea | style | script )
(?<tagContent> < (\g<tagBL>) \b .*? </ \g{-1} > )
(?<tags> < [^>]* > )
(?<cdata> <!\[CDATA .*? ]]> )
(?<exclusionList> \g<tagContent> | \g<cdata> | \g<tags>)
)
# pattern :
\g<exclusionList> (*SKIP) (*FAIL) | \s+
~xsi
LOD;
$html = preg_replace($pattern, ' ', $html);
preg_replace_callback() 来调整它。 .</ \g{-1} >至 (?: </ (?:\g{-1}| head | body | html) > | $)例如在标签内容定义中,或者编写更高级的规则。\t或 \n .如果您想要与双引号相同的行为,请使用 heredoc 语法。/ 来写他们的模式。分隔符。 /Gnagnagna/ , /blablabla/ixUums等。但是当他们编写一个包含大约一千或一百万个斜杠字符的模式时,他们更喜欢逐个转义千位斜杠,以选择另一个分隔符!使用 PHP,如果它不是字母数字字符,您可以选择所需的模式分隔符。我选择了~而不是 /出于三个原因:~ , 我不必转义斜杠,因为分隔符和文字字符没有歧义。 # comment在行尾。~([0-9]+)~要匹配和捕获组 1 内的数字,您可以写 ~(?<number>[0-9]+)~ .现在,使用这个命名的子模式,您可以使用 \g{number} 引用捕获的内容。或使用 \g<number> 到模式本身, 模式中的任何位置。例子:~^(?<num>[0-9]+)(?<letter>[a-z]+)\g<num>\g<letter>$~
45ab67cd~^(?<num>[0-9]+)(?<letter>[a-z]+)\g{num}\g<letter>$~
45ab45cd但不是 45ab67cd(?(DEFINE)...)语法,您可以在主模式之外定义它们,因为您在这些括号之间编写的所有内容都不匹配。~(?(DEFINE)(?<num>[0-9]+)(?<letter>[a-z]+))^\g<num>\g<letter>$~
45ab67cd ,因为都在DEFINE里面匹配部分将被忽略,但是:~(?(DEFINE)(?<num>[0-9]+)(?<letter>[a-z]+))^\g<num>\g<letter>\g<num>\g<letter>$~
$str = 'cats meow because cats are bad.';
$pattern = '~^(\w+) \w+ \w+ \1 \w+ \w+\.$~';
var_dump(preg_match($pattern, $str));
true因为模式匹配字符串。在图案中,\1指的是第一个捕获组的内容 ( cats )。而不是写 \1 ,您可以使用 oniguruma 语法和写作 \g{1}也指第一个捕获组,它是相同的。\g{-1} (即我左边的第一组)x # for verbose mode
i # make the pattern case insensitive (i.e. '~CaT~i' will match "cat")
s # (singleline mode): by default the . doesn't match newline, with the s modifier it does.
"aaaaab"与 ~a+ab~正则表达式引擎,自 +是一个贪婪的量词,将捕获所有 a (五一),但之后它只留下一个b与子模式不匹配 ab .正则表达式引擎的唯一方法是取回一个 a ,然后可以匹配 ab .这是正则表达式引擎的默认行为。(*SKIP)和 (*FAIL)(*FAIL)是最容易的。子模式被迫立即失败。(*SKIP) :当子模式在此动词之后失败时,正则表达式引擎无权回溯此动词之前匹配的字符。并且此内容不能重用于另一个替代子模式。关于php - html 文档中的正则表达式 : match all but every <(pre|code|textarea)>(. *?)</\\1>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421646/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
我在一个我想在formtasticGem中覆盖的方法中找到了这个。该方法如下所示:defto_htmlinput_wrappingdohidden_field_html是什么意思?在第三行做什么?我知道它对数组有什么作用,但在这里我不知道。 最佳答案 你可以这样读:hidden_field_htmllabel_with_nested_checkbox是连接到hidden_field_html末尾的参数-为了“清晰”,他们将其分成两行 关于ruby-on-rails-没有参数的`