我正在使用stripos函数来检查字符串是否位于另一个字符串内,忽略任何情况.
这是问题所在:
stripos("ø", "Ø")
Run Code Online (Sandbox Code Playgroud)
返回false.而
stripos("Ø", "Ø")
Run Code Online (Sandbox Code Playgroud)
返回true.
正如您可能看到的,在这种情况下,函数似乎不会执行不区分大小写的搜索.
该功能与Ææ和åå等字符有同样的问题.这些是丹麦人物.
我一直在PHP手册中查找一段时间,找不到任何能够满足我想要的命令.
我有一个包含键和值的数组,例如:
$Fields = array("Color"=>"Bl","Taste"=>"Good","Height"=>"Tall");
Run Code Online (Sandbox Code Playgroud)
然后我有一个字符串,例如:
$Headline = "My black coffee is cold";
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否有任何数组($ Fields)值匹配字符串中的某个位置($ Headline).
例:
Array_function_xxx($Headline,$Fields);
Run Code Online (Sandbox Code Playgroud)
将结果设为true,因为"bl"在字符串$ Headline中(作为"Black"的一部分).
我问,因为我需要表现......如果这是不可能的,我会做出自己的功能......
编辑 - 我正在寻找像stristr(string $ haystack,array $ needle);
谢谢
解决方案 - 我想出了他的功能.
function array_in_str($fString, $fArray) {
$rMatch = array();
foreach($fArray as $Value) {
$Pos = stripos($fString,$Value);
if($Pos !== false)
// Add whatever information you need
$rMatch[] = array( "Start"=>$Pos,
"End"=>$Pos+strlen($Value)-1,
"Value"=>$Value
);
}
return $rMatch;
}
Run Code Online (Sandbox Code Playgroud)
返回的数组现在具有关于每个匹配的单词的开始和结束位置的信息.
我正在尝试在字符串中查找(并替换)重复的字符串.
我的字符串可能如下所示:
Lorem ipsum dolor sit amet sit amet sit amet sit nostrud exercitation amit sit ullamco laboris nisi ut aliquip ex ea commodo consequat.
这应该成为:
Lorem ipsum dolor sit amet sit nostrud exercitation amit sit ullamco laboris nisi ut aliquip ex ea commodo consequat.
请注意,由于没有重复,因此不会删除amit sit.
或者字符串可以是这样的:
Lorem ipsum dolor sit amet()sit amet()sit amet()sit nostrud exercitation ullamco laboris nisi ut aliquip aliquip ex ea commodo consequat.
应成为:
Lorem ipsum dolor sit amet()sit nostrud exercitation ullamco laboris nisi …
首先,如果我写了很多,请原谅,我试图总结我的研究,以便每个人都能理解。
R. Baeza-Yates 和 M. Regnier 于 1990 年发表了一种新算法,用于在二维 n n 文本中搜索二维mm 模式。该出版物写得非常好,对于像我这样的新手来说也很容易理解,算法是用伪代码描述的,我能够成功地实现它。
BYR 算法的一部分需要 Aho-Corasick 算法。这允许在字符串文本中搜索多个关键字的出现。然而,他们也说他们的这部分算法可以通过使用 Aho-Corasick 而不是 Commentz-Walter 算法(基于 Boyer-Moore 而不是 Knuth-Morris-Pratt 算法)得到很大的改进。他们唤起了他们自己开发的 Commentz-Walter 算法的替代方案。这在他们之前的出版物中进行了描述和解释(见第 4 章)。
这就是我的问题所在。正如我所说,算法会遍历文本并检查它是否包含关键字集中的单词。单词倒置排列并放置在树中。为了提高效率,有时需要跳过一些字母,因为他知道没有找到匹配项。

以确定可以被跳过,两个表中的字符数d,并dd必须被计算出来。那么,算法很简单:
该算法的工作原理如下:
- 我们将树的根与文本中的位置 m 对齐,然后沿着树中的相应路径从右到左开始匹配文本。
- 如果找到匹配项(最终节点),我们输出相应字符串的索引。
- 在匹配或不匹配之后,我们使用与当前节点关联的最大移位(表示 dd)和 d[x] 的值在文本中进一步移动特里树,其中 x 是文本中对应于树根。
- 在新位置从右到左再次开始匹配树。
我的问题是我不知道如何计算dd函数。在他们的出版物中,R. Baeza-Yates 和 M. Regnier 提出了它的正式定义:

pi 是关键字集合中的一个词,j 是这个词中一个字母的索引,所以 pi[j] 就像我之前展示的树中的一个节点。节点中的数字表示 dd(node)。L 是单词数,mi 是单词 pi 中的字母数。
他们没有给出关于这个函数的构造的说明。他们只推荐观看W. Rytter 的作品。本文档构建了一个与预期类似的函数,不同之处在于在这种情况下,只有一个关键字而不是一个集合。
dd(这里称为D)的定义如下: …
Octave中是否有一个函数返回单元格数组中第一次出现字符串的位置?
我发现findstr但这会返回一个我不想要的矢量.我想要做什么index,但它只适用于字符串.
如果没有这样的功能,有没有关于如何去做的提示?
虽然 StackOverflow 上有几篇与此类似的帖子,但它们都没有涉及目标字符串在子字符串之一后一个空格的情况。
我有以下字符串(example_string):
<insert_randomletters>[?] I want this string.Reduced<insert_randomletters>
我想提取“我想要这个字符串”。从上面的字符串。随机字母总是会改变,但是引用“我想要这个字符串”。将始终介于[?](最后一个方括号后有一个空格)和 Reduced 之间。
现在,我可以执行以下操作来提取“我想要这个字符串”。
target_quote_object = re.search('[?](.*?)Reduced', example_string)
target_quote_text = target_quote_object.group(1)
print(target_quote_text[2:])
Run Code Online (Sandbox Code Playgroud)
这消除了],并总是出现在我的已提取的字符串,从而只打印的开始:“我想这个字符串。” 但是,这个解决方案看起来很丑,我宁愿re.search()不做任何修改就返回当前的目标字符串。我怎样才能做到这一点?
我有很多固定字符串(约500万),我想在很多文件中搜索.
我看到两种最常用的使用有限模式进行字符串搜索的算法是:Aho-Corasick和Commentz-Walter.
我的目标是找到完全匹配而不是模式(这意味着字符串列表不是正则表达式).
经过一番研究,我发现了很多的文章,指出Commentz -瓦尔特·往往是在现实世界中的场景(比阿霍Corasick更快的第一条,第二条),而且还落后于算法的GNU的grep.
我试图以grep -F并行方式使用(取自此处):
free=$(awk '/^((Swap)?Cached|MemFree|Buffers):/ { sum += $2 }
END { print sum }' /proc/meminfo)
percpu=$((free / 200 / $(parallel --number-of-cores)))k
parallel --pipepart -a regexps.txt --block $percpu --compress \
grep -F -f - -n bigfile
Run Code Online (Sandbox Code Playgroud)
似乎问题太大了.我收到此错误:
grep: memory exhausted
Run Code Online (Sandbox Code Playgroud)
---更新---
据一些意见,我试图测试不同的阿霍Corasickç\ C++实现(Komodia,Cjgdev,chasan)他们的非本来管理的500万图案设置的例子(所有的人有记忆问题(分段故障/堆栈溢出)) - …
我有一个 CPU 型号列表。现在,我认为最合适的方法是从列表中形成一个特里,如下所示:
Intel -- Core -- i -- 3
| | |- 5
| | |- 7
| | -- 9
| |
| -- 2 Duo
|
|- Xeon -- ...
|
|...
Run Code Online (Sandbox Code Playgroud)
现在,我想将输入字符串与此树进行匹配。这对于精确匹配很容易,但是如果我需要一个模糊的匹配,字符串序列可以有遗漏怎么办?对于“Intel i3”,“Core i3”和“i3”都匹配到树中的“Intel -> Core -> i -> 3”。
对于这个问题,尝试是正确的任务吗?我想过使用带通配符的特里搜索,但这里的通配符可以在序列中的任何位置。
我可以使用什么数据结构以最适用于这个问题的方式来表示列表?我使用什么算法进行搜索?
我正在研究算法的时间复杂度,以查找字符串n是否包含子字符串m(其中m <= n )。分析结果是时间复杂度为O(nm)。因此,以这个时间复杂度为起点,并知道m <= n,因此mn <= n^2。我们可以说大 O 表示法的时间复杂度是O(n^2)吗?
例如,TableA:
ID1 ID2
123 abc
123 def
123 ghi
123 jkl
123 mno
456 abc
456 jkl
Run Code Online (Sandbox Code Playgroud)
我想对123进行字符串搜索并返回所有相应的值.
pp = Cases[#, x_List /;
MemberQ[x, y_String /;
StringMatchQ[y, ToString@p, IgnoreCase -> True]], {1}] &@TableA
{f4@"ID2", f4@pp[[2]]}
Run Code Online (Sandbox Code Playgroud)
上面,p是输入,或123.这只返回ID2的一个值.如何获取ID2的所有值?