我正在用PHP创建一个吉他标签到rtttl(铃声文本传输语言)转换器.为了准备一个用于rtttl转换的吉他标签,我首先删除所有注释(注释为# - 并以 - #结尾),然后我有几行设置速度,注意调整和定义多个乐器(Tempo 120 \n定义吉他1 \n定义低音1等等,从标签中剥离并放在一边供以后使用.
现在除了吉他标签之外,我基本上什么都没有.每个标签都以其仪器名称为前缀,并附有之前提到的仪器名称.
有些时候我们有两个独立乐器的标签,因为它们要一起演奏,即吉他和低音吉他一起演奏.
示例1,标准吉他标签:
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
Run Code Online (Sandbox Code Playgroud)
例2,连接标签:
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|
|
|Bass 1
G|----------0-------0-----------0-------0--------|
D|--------2-----------2-------2-----------2------|
A|------3---------------3---3---------------3----|
E|----3-------------------3-------------------3--|
Run Code Online (Sandbox Code Playgroud)
我已经考虑了其他识别选项卡的方法,没有可靠的结果.我希望那些做正则表达式的人可以帮我找到识别单个吉他标签的方法,如果可能的话,也可以将标签与多个连接在一起的乐器相匹配.
一旦选项卡在一个数组中,我将一次一行地将它们转换为rtttl行(在每个新行"\n"处展开).
我不想通过爆炸"\n \n"或类似的东西来分离文档中的吉他标签,因为它不识别吉他标签,而是识别标签之间的空间 - 而不是标签本身.
我现在已经搞乱了一个星期了,这是我唯一的主要举措.其他一切都相当简单.
截至目前,我已经尝试了许多正则表达式的变体.这是最新的测试样本之一:
<?php
$t = "
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|Guitar 1
e|--------------3-------------------3------------|
B|------------3---3---------------3---3----------|
G|----------0-------0-----------0-------0--------|
D|--------0-----------0-------0-----------0------|
A|------2---------------2---2---------------2----|
E|----3-------------------3-------------------3--|
|
|
|Bass 1
G|----------0-------0-----------0-------0--------|
D|--------2-----------2-------2-----------2------|
A|------3---------------3---3---------------3----|
E|----3-------------------3-------------------3--|
";
preg_match_all("/^.*?(\\|).*?(\\|)/is",$t,$p);
print_r($p);
?>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,在标签内部,破折号和#是,你可能还有字母,数字和标点符号的任何变化.每行的开头标记每个字符串的调整,其中一个不区分大小写:a,a#,b,c,c#,d,d#,e,f,f#,g或g.
在此先感谢您帮助解决这个最棘手的问题.
我已经在一个项目上工作了两年多,我终于准备好启动了,但首先我必须集成基于订阅的支付选项,这样我才能真正从这个东西中赚到一些钱。我已经尝试整合贝宝订阅了大约两个月,但这是一个重大阻碍。而且,这导致我秃头。请帮忙!
我认为有一种概述解释来描述我需要遵循的接受基于订阅的付款的明确流程会非常有帮助。详细程度将包括每个步骤应该发生的位置;前端或后端(服务器),以及了解数据流向何处所需的任何中间步骤。其次,智能按钮的实际代码以及一些注释表明代码正在处理流程的哪一部分。也许这是一个很多要求,但我们将不胜感激,我相信对于其他想要像我现在一样做同样事情的人来说,这是一个很好的资源。
目前,我的主要问题是,当我在脚本中设置指向 paypal SDK 的 URL 并包含 &intent=authorize 时,错误消息中告诉我需要设置intent=capture,但是当我设置intent时=capture 我被告知我需要设置intent=authorize。所以现在我很困惑我应该做什么;授权交易或捕获交易。Paypal 技术支持人员向我提供了 Paypal 开发者网站上两个不同指南的链接,这些指南似乎相互矛盾 - 第一个链接没有提及有关捕获或授权付款的内容,第二个链接却说了。但我不明白第二个链接的上下文。第一个链接是所有客户端,第二个链接是客户端和服务器端。为什么需要这些intent=ca[ture/authorize?我认为,一旦有人同意并完成订阅注册,并且我已经捕获了他们的订阅 ID,我不需要做任何其他事情就可以按照我的计划中的每月设置接收资金,我会只需查询 paypal API 即可了解客户登录我的服务后是否已付款。
我已经设置了一个沙盒帐户,并创建了一个产品和一个计划。客户登录后,我会使用我的计划 ID 呈现智能按钮。
如果我在 paypal SDK 脚本 URL 中设置intent=capture,paypal 窗口将打开,您选择付款并同意,然后我在控制台中收到此错误:
env: "sandbox"
err: "Error: Use intent=authorize to use client-side authorize"
referer: "localhost:88"
timestamp: "1589939180937"
uid: "fad5852fa3_mde6ndq6mdu"
Run Code Online (Sandbox Code Playgroud)
但是如果我设置intent=authorize,我单击智能按钮,paypal 窗口会显示并快速消失,然后我会收到此错误:
buttonSessionID: "e3bf3c6c3d_mdi6mdi6mzq"
env: "sandbox"
err: "Uncaught Error: Expected intent from order api call to be authorize, got capture. Please ensure you are passing intent=capture to the sdk url"
referer: "www.sandbox.paypal.com"
sessionID: "fad5852fa3_mde6ndq6mdu" …
Run Code Online (Sandbox Code Playgroud) 这是针对“客户签名”组件的反应。touchmove 事件不会在 Android 版 Google Chrome 浏览器上触发。我使用的是三星 Galax 平板电脑 a (2016)。我通过 USB 控制台将平板电脑连接到我的电脑。
在我的 componentDidMount 中,我获取画布引用、2d 上下文等,并为画布元素设置事件侦听器:
componentDidMount(){
let canvas = this.refs.canvas;
let ctx = canvas.getContext("2d");
// ...
canvas.addEventListener('touchmove ', (e) => { console.log("touchMove: ", e); });
}
Run Code Online (Sandbox Code Playgroud)
在我的渲染中,我有画布: render(){ }
该事件永远不会触发。我已在 touchstart 上设置了 e.preventDefault;触摸画布区域内部时页面不会滚动。触摸画布内部并移动手指不会执行任何操作。
我还有其他有效的事件,所以我认为这与画布参考没有任何关系。
document.addEventListener('keydown', this.keyPress);
canvas.addEventListener('mousemove', this.mouseMove); // works
canvas.addEventListener('touchmove ', (e) => { console.log("touchMove E: ", e); }); // does not work
canvas.addEventListener("mousedown", this.mouseDown); // works
canvas.addEventListener("mouseup", this.mouseUp); // works
canvas.addEventListener("touchstart", this.touchStart); // works
canvas.addEventListener("touchend", …
Run Code Online (Sandbox Code Playgroud) 我有一个父组件和一个子组件。子组件最初将数据呈现到表单中,但在更改数据后,子组件不会更新。
\n父组件:
\nimport React from \'react\'\nimport { connect } from \'react-redux\'\nimport styles from \'../styles\'\nimport ExpressionsForm from \'./expressionsForm\'\n\nclass EditCondition extends React.Component {\n constructor (props) {\n super(props)\n this.state = {\n condition: null\n }\n\n this.updateExpression = this.updateExpression.bind(this)\n\n this.changes = false\n }\n\n componentWillMount () {\n let conditionid = this.props.data.id\n let condition = this.props.conditions.find(c => {\n return (c.id = conditionid)\n })\n this.setState({ condition })\n }\n\n updateExpression (e) {\n let expressionid = e.currentTarget.dataset.expressionid\n let field = e.currentTarget.dataset.field\n let value = e.target.value\n let condition = …
Run Code Online (Sandbox Code Playgroud)