字符串是有限的符号序列,通常用于文本,但有时用于任意数据。
leetcode 上添加两个二进制字符串以获得二进制字符串结果的入门问题
所以我在leetcode上遇到了这个问题,你得到2个带有二进制值的字符串,并且必须将它们的总和作为二进制字符串返回。但是,某些测试用例(例如 a='11' b='1')不会返回
C++中std::string连接的原理是什么?它在内存分配中如何工作? 我在探索 Java 中的 leetcode 卡时发现: “串联首先起作用
我从编辑器收到了一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "帐户 {{帐户}} 我从编辑器收到一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "<div>Account <span contenteditable="false">{{account}}</span></div>. <div>Hello <span contenteditable="false">{{hello}}</span></div>" 在此内容中,有两个格式为 {{account}} 和 {{hello}} 的变量。 在我的数据库中,我以格式存储变量数据 { key: string, value: string, isDefault: boolean }: [ { "key" : "account", "value" : "", "isDefault" : true, }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false } ] 首先,我使用一个函数来删除 HTML 标签: const blockTags = /<(div|h1|h2|h3|h4|h5|h6|p|ul|ol|li|br)[^>]*>/gi; const inlineTags = /<\/?(span|a|strong|em|b|i|u)[^>]*>/gi; let content = htmlString.replace(blockTags, '\n').replace(/<\/(div|h1|h2|h3|h4|h5|h6|p)>/gi, '\n'); content = content.replace(inlineTags, ''); content = content.replace(/<[^>]+>/g, ''); content = content.replace(/\n\s*\n/g, '\n').trim(); 然后,我提取变量: const variables = (content.match(/\{\{(.*?)\}\}/gi) || []).map((item) => item.replace(/\{\{|\}\}/g, '')); 最后,我使用一个函数将所有变量替换为数据库中相应的值,如果变量是默认值(isDefault = true),我将根据系统规则根据配置替换为动态值: const objVariables = variables.reduce((acc, { key, value, isDefault }) => { acc[key] = { value, isDefault }; return acc; }, {}); const result = content.replace(/\{\{(.*?)\}\}/g, (match, variable) => { const variableData = objVariables[variable]; if (variableData && variableData.isDefault) { if (variable === "account") { return "ACCOUNT_NAME"; } } return variableData ? variableData.value : match; }); 我想用数据库中存储的值替换 HTML 字符串中的所有变量,但我认为我的代码不是最好的解决方案,而且可能很慢。我正在寻找优化的解决方案或任何建议。 我认为你应该迭代你的变量并替换它们(如果在字符串中找到它们)...不需要剥离标签。 const myVariables = [ { "key" : "account", "value" : "", "isDefault" : true }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false }, ]; let myString = myContent.innerHTML; myVariables.forEach ( ( { key, value, isDefault } ) => myString = myString.replaceAll ( `{{${key}}}`, ( ( isDefault && ( key === 'account' ) ) ? 'ACCOUNT_NAME' : value ?? key ) ) ); myContent.innerHTML = myString; <div id="myContent"> <div>Account <span contenteditable="false">{{account}}</span>.</div> <div>Hello <span contenteditable="false">{{hello}}</span></div> </div> 请注意,在上面的示例中,甚至没有触及 html。 const htmlString = `<div>Account <span contenteditable="false">{{account}}</span></div>. <div>Hello <span contenteditable="false">{{hello}}</span></div>`; const databaseVariables = [ { key: "account", value: "", isDefault: true }, { key: "hello", value: "Hello everyone", isDefault: false }, ]; // Step 1: Convert database array into a Map for faster lookups const variableMap = new Map(databaseVariables.map(item => [item.key, item])); // Step 2: Function to strip HTML tags while keeping content structure function stripHtml(html) { // Replace block tags with newline and inline tags with nothing return html .replace(/<(div|h[1-6]|p|br)[^>]*>/gi, '\n') // Block-level elements .replace(/<\/(div|h[1-6]|p)>/gi, '\n') // Block-level end tags .replace(/<\/?(span|a|strong|em|b|i|u)[^>]*>/gi, '') // Inline tags .replace(/\n\s*\n/g, '\n') // Remove excess newlines .replace(/<[^>]+>/g, '') // Remove remaining tags .trim(); } // Step 3: Function to replace variables in content function replaceVariables(content) { return content.replace(/\{\{(.*?)\}\}/g, (match, variable) => { const variableData = variableMap.get(variable); if (variableData) { if (variableData.isDefault && variable === "account") { return "ACCOUNT_NAME"; } return variableData.value || match; } return match; }); } const strippedContent = stripHtml(htmlString); const finalResult = replaceVariables(strippedContent); console.log(finalResult);
正则表达式和 PHP - 将 src 属性与 img 标签隔离[重复]
使用 PHP,如何将 src 属性的内容与 $foo 隔离?我正在寻找的最终结果会给我“http://example.com/img/image.jpg” $foo = ' 使用 PHP,如何将 src 属性的内容与 $foo 隔离?我正在寻找的最终结果会给我“http://example.com/img/image.jpg” $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; 如果您不想使用正则表达式(或任何非标准 PHP 组件),使用内置 DOMDocument 类的合理解决方案如下: <?php $doc = new DOMDocument(); $doc->loadHTML('<img src="http://example.com/img/image.jpg" ... />'); $imageTags = $doc->getElementsByTagName('img'); foreach($imageTags as $tag) { echo $tag->getAttribute('src'); } ?> 代码 <?php $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; $array = array(); preg_match( '/src="([^"]*)"/i', $foo, $array ) ; print_r( $array[1] ) ; 输出 http://example.com/img/image.jpg 我得到了这个代码: $dom = new DOMDocument(); $dom->loadHTML($img); echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src'); 假设只有一张img :P // Create DOM from string $html = str_get_html('<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'); // echo the src attribute echo $html->find('img', 0)->src; http://simplehtmldom.sourceforge.net/ 我对此已经很晚了,但我有一个尚未提及的简单解决方案。使用 simplexml_load_string 加载它(如果您启用了 simplexml),然后通过 json_encode 和 json_decode 翻转它。 $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; $parsedFoo = json_decode(json_encode(simplexml_load_string($foo)), true); var_dump($parsedFoo['@attributes']['src']); // output: "http://example.com/img/image.jpg" $parsedFoo 出现为 array(1) { ["@attributes"]=> array(6) { ["class"]=> string(12) "foo bar test" ["title"]=> string(10) "test image" ["src"]=> string(32) "http://example.com/img/image.jpg" ["alt"]=> string(10) "test image" ["width"]=> string(3) "100" ["height"]=> string(3) "100" } } 我已经使用它来解析 XML 和 HTML 几个月了,而且效果非常好。我还没有遇到任何问题,尽管我还没有必要用它来解析一个大文件(我想使用 json_encode 和 json_decode 这样的输入越大,速度就越慢)。它很复杂,但它是迄今为止读取 HTML 属性的最简单方法。 这就是我最终所做的,尽管我不确定这有多有效: $imgsplit = explode('"',$data); foreach ($imgsplit as $item) { if (strpos($item, 'http') !== FALSE) { $image = $item; break; } } 您可以使用此功能解决此问题: 函数 getTextBetween($start, $end, $text) { $start_from = strpos($text, $start); $start_pos = $start_from + strlen($start); $end_pos = strpos($text, $end, $start_pos + 1); $subtext = substr($text, $start_pos, $end_pos); 返回$subtext; } $foo = ''; $img_src = getTextBetween('src="', '"', $foo); <?php $html = ' <img border="0" src="/images/image1.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image3.jpg" alt="Image" width="100" height="100" /> '; $get_Img_Src = '/<img[^>]*src=([\'"])(?<src>.+?)\1[^>]*>/i'; //for get img src path only... preg_match_all($get_Img_Src, $html, $result); if (!empty($result)) { echo $result['src'][0]; echo $result['src'][1]; } 还可以获取 img src 路径和替代文本 然后使用下面的正则表达式而不是上面的... ]*src=(['"])(?.+?) [^>]alt=(['"])(?.+?) > $get_Img_Src = '/<img[^>]*src=([\'"])(?<src>.+?)\1[^>]*alt=([\'"])(?<alt>.+?)\2*>/i'; //for get img src path & alt text also preg_match_all($get_Img_Src, $html, $result); if (!empty($result)) { echo $result['src'][0]; echo $result['src'][1]; echo $result['alt'][0]; echo $result['alt'][1]; } 我从这里想到了这个很棒的解决方案,PHP从href标签中提取链接 对于提取特定域的 URL,请尝试以下正则表达式 // for e.g. if you need to extract onlt urls of "test.com" // then you can do it as like below regex <a[^>]+href=([\'"])(?<href>(https?:\/\/)?test\.com.* ?)\1[^>]*> 附加信息 要获取包含base64编码数据的img src属性,您可以像下面这样做。你可以在here onlinephp.io上测试它 <?php $html = ' <p>test </p> <img border="0" src="/images/image1.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image3.jpg" alt="Image" width="100" height="100" /> <img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAfCAYAAADuiY/xAAAAGXRF..." alt="Base64 Image 1" width="100" height="100" /> <img border="0" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAAAAAAAAEAAQAAAQAAAQEAAEAAAD/..." alt="Base64 Image 2" width="100" height="100" /> <h1>asas</h1> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="data:image/gif;base64,R0lGODlhPQBEAP8A..." alt="Base64 Image 3" width="100" height="100" /> <img border="0" src="http://test.com/images/image2.jpg" alt="Image" width="100" height="100" /> '; $get_Img_Src = '/<img[^>]*src=["\'](data:image\/[^;]+;base64[^"\']+)["\'][^>]*>/i'; // Regex to capture base64 image src preg_match_all($get_Img_Src, $html, $result); // Debugging step: print the entire result array echo "Full result:\n"; print_r($result); if (!empty($result[1])) { echo "Base64 matches found: " . count($result[1]) . PHP_EOL; // Access the base64 data in the first capture group, i.e. $result[1] foreach ($result[1] as $base64) { echo $base64 . PHP_EOL; // Echo each base64 encoded image string } } else { echo "No base64 images found." . PHP_EOL; } ?> 尝试这个模式: '/< \s* img [^\>]* src \s* = \s* [\""\']? ( [^\""\'\s>]* )/' 我使用 preg_match_all 来捕获 HTML 文档中的所有图像: preg_match_all("~<img.*src\s*=\s*[\"']([^\"']+)[\"'][^>]*>~i", $body, $matches); 这个允许更宽松的声明语法,带有空格和不同的引用类型。 正则表达式读起来像 (任何属性,如 style 或 border) src (可能的空格)=(可能的空格)(' 或 ")(任何非引号符号)(' 或 ")(任何直到>) (>) 假设我使用 $text ='<img src="blabla.jpg" alt="blabla" />'; 在 getTextBetween('src="','"',$text); 代码将返回: blabla.jpg" alt="blabla" 这是错误的,我们希望代码返回属性值引号之间的文本,即 attr =“value”。 所以 function getTextBetween($start, $end, $text) { // explode the start string $first_strip= end(explode($start,$text,2)); // explode the end string $final_strip = explode($end,$first_strip)[0]; return $final_strip; } 成功了! 尝试 getTextBetween('src="','"',$text); 将返回: blabla.jpg 还是谢谢你,因为你的解决方案让我了解了最终的解决方案。
将变量替换为包含 HTML 的 JavaScript 字符串中数据库中的值
我从编辑器收到了一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "帐户 {{帐户}} 我从编辑器收到一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "<div>Account <span contenteditable="false">{{account}}</span></div>. <div>Hello <span contenteditable="false">{{hello}}</span></div>" 在此内容中,有两个格式为 {{account}} 和 {{hello}} 的变量。 在我的数据库中,我以格式存储变量数据 { key: string, value: string, isDefault: boolean }: [ { "key" : "account", "value" : "", "isDefault" : true, }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false } ] 首先,我使用一个函数来删除 HTML 标签: const blockTags = /<(div|h1|h2|h3|h4|h5|h6|p|ul|ol|li|br)[^>]*>/gi; const inlineTags = /<\/?(span|a|strong|em|b|i|u)[^>]*>/gi; let content = htmlString.replace(blockTags, '\n').replace(/<\/(div|h1|h2|h3|h4|h5|h6|p)>/gi, '\n'); content = content.replace(inlineTags, ''); content = content.replace(/<[^>]+>/g, ''); content = content.replace(/\n\s*\n/g, '\n').trim(); 然后,我提取变量: const variables = (content.match(/\{\{(.*?)\}\}/gi) || []).map((item) => item.replace(/\{\{|\}\}/g, '')); 最后,我使用一个函数将所有变量替换为数据库中的相应值,如果变量是默认值(isDefault = true),我将根据系统规则根据配置替换为动态值: const objVariables = variables.reduce((acc, { key, value, isDefault }) => { acc[key] = { value, isDefault }; return acc; }, {}); const result = content.replace(/\{\{(.*?)\}\}/g, (match, variable) => { const variableData = objVariables[variable]; if (variableData && variableData.isDefault) { if (variable === "account") { return "ACCOUNT_NAME"; } } return variableData ? variableData.value : match; }); 我想用数据库中存储的值替换 HTML 字符串中的所有变量,但我认为我的代码不是最好的解决方案,而且可能很慢。我正在寻找优化的解决方案或任何建议。 我认为你应该迭代你的变量并替换它们(如果在字符串中找到它们)...不需要删除标签。 const myVariables = [ { "key" : "account", "value" : "", "isDefault" : true }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false }, ]; let myString = myContent.innerHTML; myVariables.forEach ( variableData => { const { key, value, isDefault } = variableData; myString = myString.replace ( `{{${key}}}`, ( ( isDefault && ( key === 'account' ) ) ? 'ACCOUNT_NAME' : value ?? key ) ); } ); myContent.innerHTML = myString; <div id="myContent"> <div>Account <span contenteditable="false">{{account}}</span>.</div> <div>Hello <span contenteditable="false">{{hello}}</span></div> </div> 请注意,在上面的示例中,甚至没有触及 html。
如何在Java中使用递归对仅由两个不同字符组成的字符串进行排序?
所以,我的问题就在标题中。唯一允许的方法是 length()、isEmpty()、charAt() 和 substring()。我们不能使用任何新方法,不能使用循环或数组 公共类排序字符串{ 私人
如何在Java中递归检查一个字符串是否以另一个字符串开头和结尾而不使用equals()?
我需要编写一个方法 private static boolean textStartSeqEndSeq(String text, Stringequence)。 该方法比较文本和序列,其中序列必须位于文本的开头和结尾......
非常简单的问题我需要从用户那里获取一个整数,而我只知道如何从他们那里获取一个字符串。因此,如果有一种方法可以从用户那里获取整数或将字符串转换为整数...
Rust 的内置 cmp 对于 &str 使用什么排序顺序?
正如我从这个问题中了解到的,有很多方法可以解释两个字符串的顺序。 Rust 为 str 提供了 Ord 的默认实现,但我找不到这些问题的答案:
我有一串数字,如下所示: example_string = '0, 0, 0, 11, 0, 0, 0, 0, 0, 19, 0, 9, 0, 0, 0, 0, 0, 0, 11' 我想将其转换为列表: example_list = [0, 0, 0, 11, 0, 0, 0, 0, 0, ...
如何从 JButton 获取按下的字母并将其与字符串进行比较?
我想在 JButton 被按下时获取按下的字母 公共类 ButtonDisabler 实现 ActionListener { @覆盖 公共无效actionPerformed(ActionEvent e){ JB...
任务是获取python中唯一的子字符串列表。 我目前正在将问题分解为两部分:获取所有子字符串的列表,然后获取唯一的子字符串...
我很清楚这是一个菜鸟问题,但我似乎找不到解决方案,我对编程很陌生,但渴望学习。我正在用 python 学习第一个 google 课程,这就是
如果输入等于字符串则(某事)不起作用Python 3 [重复]
我最近正在创建一个文本冒险游戏,但几乎立即遇到了输入问题。当我使用字符串而不是整数时,它会给出错误消息。可能有一个
这是我的代码: #!/usr/bin/python 从 xml.etree.ElementTree 导入 ElementTree 从数组导入* #导入重新 计数 = 数组('i',[0,0,0]) def find_root_tags(文件,str1,i): 树=
使用 Python input() 调用从用户读取名称错误[重复]
我是一个Python新手,写了一个短程序。第一部分有效,但 if 语句部分有回溯/语法?问题。建议? hours = input("你这周工作了多少小时?")
我对 Java 的 String.intern() 方法文档感到困惑。官方文档指出: 返回字符串对象的规范表示。一池 字符串,最初为空,是
我对 Java 的 String.intern() 方法文档感到困惑。官方文档指出: 返回字符串对象的规范表示。一池 字符串,最初为空,是
在Java中,我有以下方法: 公共字符串正常化列表(列表键){ // ... } 我想检查一下这些键: 本身不为 null;和 不为空 (size() == 0);和 没有
java.sql.SQLException:ORA-00913:尝试将双精度值插入 Oracle 数据库时,值太多
我必须开发一个小程序,将一些数据插入Oracle数据库。 不幸的是,我在 SQL 语句及其执行方面遇到了一些问题。这是我正在使用的代码: db.exec...